2014-01-19 34 views
0

我嘗試使用下面的代碼jQuery的:on Rails的跨域POST

$.ajax({ 
    url: "http://domainName.com/api/v1/statistics/1", 
    crossDomain: true, 
    type: 'POST', 
    dataType: 'jsonp' 
    }); 

使POST請求到另一個域,但它給我的錯誤(404)和它似乎看到了請求作爲獲取請求不管是什麼

+1

[404](http://en.wikipedia.org/wiki/HTTP_404)頁面未找到。我認爲URl是錯的 。 –

+0

由於您告訴jquery您有興趣提出JSONP請求,因此請求是GET。這是你的dataType選項中的拼寫錯誤嗎? –

回答

3

您不能通過JSONP POST。你只能使用GET。

此外,域名應包含:http://來訪問外部文檔。我希望你知道你必須創建一個使用JSONP的函數。默認調用回調函數callback所以你的反應應該是這樣的:

callback({ "data" : "data"}); 

回調函數?callback=?將autoomaticly被添加到URL。如果您重寫了,則必須使用$_GET['callback']來獲取回調函數。

從jQuery docs

「JSONP」:使用JSONP荷載在JSON塊。添加額外的 「?callback =?」到您的URL的末尾來指定回調。除非緩存選項設置爲true,否則通過向 URL附加查詢字符串參數「_ = [TIMESTAMP]」來禁用 緩存。

編輯

您的請求將看起來像:

$.ajax({ 
    url: "http://domainName.com/api/v1/statistics/1", 
    crossDomain: true, 
    dataType: 'jsonp', 
    jsonp : "mycallback", 
    success : function(data){ 
     console.log(data.thiskey); // Will log OK 
    } 
}); 

現在請求URL到您的API看起來就像這樣(jQuery將追加?callback=mycallback):

http://domainName.com/api/v1/statistics/1?callback=mycallback 

在你的回覆中,你必須創建一個函數調用,以便它調用jQuery Ajax函數。這一結果必須是這個樣子:

mycallback({ thiskey : "OK" }); // The data in this call can be retreived at the success function 

在成功的功能,您可以中檢索喜歡你的數據:

success : function(data){ 
    console.log(data.thiskey); // Will log OK 
} 
+0

你能解釋更多..我應該把這個回調放在哪裏..我使用http://當然,但我不知道如何應用你的答案:) –

+0

增加了一個例子。這是僞代碼,並沒有測試這個。 – Niels

1

CORS

繼尼爾斯的答案,你必須意識到,跨域數據發送取決於「目標」域的CORS policy

基本上,除非您使用某種CORS中間件創建一些端點以訪問「外部」ajax請求,否則服務器的中間件會拒絕這些請求。

如果您錯誤地忽略了404錯誤,應該查看使用如Rack-CORS爲您的應用提供跨域支持(允許跨域異步數據傳輸)