Jquery ajax POST请求到Rails(xml)操作



嗨,我们正在尝试使用xml将数据发布到另一个rails应用程序。

在目的地应用程序上,我有这个代码

class DaemonsController < ApplicationController
skip_before_filter :verify_authenticity_token 
respond_to :xml, :html

def new
 respond_with(@daemon = Daemon.new)
end
def create
 @daemon = Daemon.new(params[:daemon])
 if @daemon.save
   #redirect_to @daemon, :notice => "Successfully created daemon."
   respond_with(@daemon, :location => daemons_url)
 else
   render :action => 'new'
 end
end
end

因此,XML被允许用于发布数据。在我的另一个应用程序中,我使用jquery进行数据发布

$.ajax({
  type: "POST",
  url: "http://localhost:3000/daemons.xml",
  data: "<daemon><mac>abc</mac><status>1</status></daemon>",
  contentType: 'application/xml; charset=utf-8', // format of request payload
  dataType: 'html', // format of the response
  success: function(msg) {
    alert( "Data Saved: " + msg );
  }
  });

但这会返回一个错误:

Started OPTIONS "/daemons.xml" for 127.0.0.1 at 2011-05-30 12:04:05 +0200
ActionController::RoutingError (No route matches "/daemons.xml"):

当我使用curl命令发布相同的数据时,一切正常

curl -i -X 'POST' -H 'Content-Type: application/xml' http://localhost:3000/daemons -d '<daemon><mac>ABC</mac><status>1</status></daemon>'
HTTP/1.1 201 Created 
Location: http://localhost:3000/daemons
Content-Type: application/xml; charset=utf-8
Cache-Control: no-cache
X-Ua-Compatible: IE=Edge
X-Runtime: 0.195632
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Mon, 30 May 2011 10:02:40 GMT
Content-Length: 291
Connection: Keep-Alive
<?xml version="1.0" encoding="UTF-8"?>
<daemon>
<created-at type="datetime">2011-05-30T10:02:39Z</created-at>
<id type="integer">2</id>
<mac-address nil="true"></mac-address>
<status type="integer">1</status>
<updated-at type="datetime">2011-05-30T10:02:39Z</updated-at>

这在webbrick日志中显示

Started POST "/daemons" for 127.0.0.1 at 2011-05-30 12:02:39 +0200
Processing by DaemonsController#create as 
Parameters: {"daemon"=>{"mac"=>"ABC", "status"=>"1"}}
AREL (1.6ms)  INSERT INTO "daemons" ("mac", "status", "created_at", "updated_at") VALUES (ABC, 1, '2011-05-30 10:02:39.920672', '2011-05-30 10:02:39.920672')

有人知道可能出了什么问题吗?

感谢

cURL命令正在使用http://localhost:3000/daemons,而您的jQuery正在使用http://localhost:3000/daemons.xml?

在进行跨站点ajax请求时,jquery 1.4.x和rails.js的旧版本出现了这个问题。我升级到了jquery 1.6和最新的rails.js,这似乎修复了它。FWIW,这与在ajax请求头中设置CSRF令牌有关。在主叫侧禁用CSRF保护也同样有效。

相关内容

  • 没有找到相关文章

最新更新