2010-02-02 89 views
5

我建立一個小的Chrome擴展程序,必須通過POST HTTP請求在我公司的網絡將消息發送到服務器的GET,和我使用jQuery 1.4。 1加快javascript部分的開發。jQuery.ajax()發送POST請求作爲一個Chrome擴展

我有這樣的代碼來發送請求:

function send() { 
    $.ajax({ 
     url: "http://mycompany.com/update", 
     method: "POST", 
     data: {status: "sometest", in_reply_to_status_id: "anId"}, 
     success: function(data, textStatus) { 
      console.log("success"); 
      console.log(data); 
      console.log(textStatus); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      console.log("error"); 
      console.log(XMLHttpRequest); 
      console.log(textStatus); 
      console.log(errorThrown); 
     }, 
     complete: function(XMLHttpRequest, textStatus) { 
      console.log("complete");    
     } 
    });  
} 

做這樣的請求失敗,在Chrome登錄我看到了從服務器返回HTTP狀態400並用文字回答「這個方法需要POST」。

如果我改變代碼上面這樣的:

function send() { 
    $.post("http://sunshine.emerasoft.com/statusnet/api/statuses/update.xml", {status: "sometext", in_reply_to_status_id: "anId"}, function(data) { 
     console.log(data) 
    }); 
} 

一切工作正常,HTTP狀態爲200和服務器端,我可以看到我發送的數據被正確保存。

我需要使用完整的$ .ajax()方法,因爲我需要在成功或失敗時做一些工作,而在請求完成時需要做一些其他工作,所以$ .post()是不夠的。
我做錯了什麼調用$ .ajax(),或者有某種問題,也許是因爲我在Chrome擴展的xontext?

感謝

回答

13

相信$.ajax()功能需要一個「類型」選項,而不是一個「方法」選項。

默認類型是GET。

+0

你是絕對正確:)我經歷了jQuery文檔一百萬次,我從未注意到我使用了錯誤的選項。感謝您指出這個給我! – 2010-02-02 23:06:13

+0

令人驚訝的是,這花了我很長時間來解決......當從同一個域進行POST時,實際上使用POST時,我有'方法'在那裏。但只要我嘗試從不同的域跨域進行POST,它最終會變成GET。這解決了它。不知道爲什麼'方法'在同一個域上工作。 – Futile32 2016-03-07 23:57:44