Hi we are trying to post data using xml to another rails app.
On the destination app I have this code
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
So XML is allowed for posting data. In my other app I'm using jquery for the data posting
$.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 );
}
});
But this returns an error :
Started OPTIONS "/daemons.xml" for 127.0.0.1 at 2011-05-30 12:04:05 +0200
ActionController::RoutingError (No route matches "/daemons.xml"):
When I post the same data using a curl command, everything is working fine
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>
This commes up in the webbrick logs
Started POST "/daemons" for 127.0.0.1 at 2011-05-30 12:02:39 +0200
Processing by DaemonsController#c开发者_C百科reate 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')
Does someone know what could be wrong?
Thanks
cURL command is using http://localhost:3000/daemons, while your jQuery is using http://localhost:3000/daemons.xml?
I had this issue with jquery 1.4.x and an older version of rails.js when making a cross site ajax request. I upgraded to jquery 1.6 and the newest rails.js and that seemed to fix it. FWIW, this had to do with setting the CSRF token in the ajax request header. Disabling CSRF protection on the calling side would work as well.
精彩评论