2013-05-28 42 views
1

嗨,我有以下代碼表單提交REST API

var dataString = "[email protected]&fname=John&lname=Doe&phone=7851233&vid=726&size=2&date=2013-05-28%202:15%20PM&request=Testing%20A%20Message"; 
$.ajax({ 
    type: "GET", 
    timeout: 5000, 
    url: "http://www.livepicly.com/app/api.php?method=add_reservation", 
    data: dataString, 
    success: function(data, textStatus) { 
     alert(data.result); 
    }, 
    error: function(xhr, textStatus, errorThrown){ 
     alert("ERROR"); 
    } 
}); 
return false; 

其中基本上我想一根繩子提交到該網址: http://www.livepicly.com/app/api.php?method=add_reservation

格式化字符串(由螢火蟲所顯示)是這樣的:

http://www.livepicly.com/app/api.php?method=add_reservation&[email protected]&fname=John&lname=Doe&phone=7851233&vid=726&size=2&date=2013-05-28%202:15%20PM&request=Testing%20A%20Message

當通過瀏覽器執行的串(直禁止複製粘貼)它完美的作品。它顯示了相應的消息。

但是,當我執行代碼時,它總是返回錯誤。有誰知道爲什麼發生這種情況?

乾杯,

+0

難道它與你的部分數據在網址中有關嗎?即,將method = add_reservation移動到數據字符串中。 – Andy

+0

可能是用url編碼的東西? –

+0

@Andy這是一個GET請求,所以他應該能夠通過查詢字符串傳遞它,除非該網站的API明確表示不這樣做。我們需要更多地瞭解他所接受的「錯誤」。 – crush

回答

1

該問題的API不是RESTful。

無論如何,你的問題是多種因素的綜合。它肯定是不是是API實際引發錯誤,因爲所有錯誤都返回爲200狀態代碼。 (不是RESTful Point#1)。因此,即使活躍地返回了一個錯誤,它仍然可以算作jQuery處理程序上的成功。

沒有特定的順序:

這是發生故障的唯一的事情!這也完全阻止了jQuery的使用。您需要做出選擇來繞過這一點,這可能包括也可能不包括:

  • 本地代理API。如果你的web服務器運行得很好,這要歸功於Apache或者nginx。對於Apache,使用ProxyPassReverseProxyPass指令使用mod_proxy,或使用帶有[P,L,QSA]標誌集的重寫規則。在nginx上,使用proxy_pass指令。如果您無權訪問,請使用curl通過PHP進行代理。
  • 給API的開發者一個耳光,以便他們能夠簡單地添加Access-Control-Allow-Origin: *的頭,這將使你的工作隨叫隨到
  • 給API的開發者一個耳光,以便讓他們支持JSONP

總的來說,只需將它們指向https://en.wikipedia.org/wiki/Representational_state_transfer並給他們一巴掌。請?

+0

downvoter實際上可以說他們爲什麼downvoted? –

+0

嘗試完你的解決方案後,它確實有道理。我不知道爲什麼它被低估。所以基本上,除了你提到的那些之外沒有其他解決辦法(考慮到我沒有任何方法來修改上述API)?恕我直言,我不鼓勵使用CURL。 – Jeremy

+0

我應該打開關於此的另一個問題。但無論如何,我如何從這個URL得到返回的消息? – Jeremy