2010-06-25 112 views
4

我執行以下AJAX調用:爲什麼我會收到501未執行錯誤?

$(document).ready(function() { 

    $.getJSON('https://sendgrid.com/api/user.stats.json', 
    { 
     'api_user': '[email protected]', 
     'api_key': 'MYAPIKEY', 
     'user': '[email protected]', 
     'category': 'MY_CATEGORY' 
    }, 
    function(response){ 
     alert('received response'); 
    } 
); 

}); 

和我沒有得到任何警告信息的預期。相反,Firebug說我得到了「501沒有實現」。

爲什麼?我需要做些什麼來解決這個問題?

如果我轉到與Firebug中的AJAX調用相對應的URL,那麼我會得到一個JSON文件作爲下載文件,它包含預期的數據。

有一兩件事我注意到的是,螢火說OPTIONS而不是GET:

alt text http://grab.by/grabs/b1a13d92a4fc69aa310880a5d7a06b95.png

回答

2

我不知道這是否有關,但一般都在客戶端請求JSON到服務器時,由於Same Origin Policy,您需要使用JSONP而不是JSON的另一個域。不幸的是,他們的API似乎並不支持使用JSONP - 所以他們必須期望您從服務器上與他們的網站進行交互。在這種情況下,您需要在服務器上使用代理方法將調用轉換爲其API,以便客戶端調用與頁面在同一個域中的服務器。

+0

我很確定這是問題所在。 JSONP可能是一個答案。 – 2010-06-25 21:26:59

+0

雖然現在我意識到通過客戶端的瀏覽器進行調用可能非常不安全,因爲它們將具有URL(其中包含私人信息)。 – 2010-06-25 21:32:27

0

我有同樣的問題,並認識到這是一個編碼問題。它通過編碼發送到服務器的數據的值來解決。試試像這樣:

$(document).ready(function() { 

    $.getJSON('https://sendgrid.com/api/user.stats.json', 
    { 
     'api_user': encodeURIComponent('[email protected]'), 
     'api_key': encodeURIComponent('MYAPIKEY'), 
     'user': encodeURIComponent('[email protected]'), 
     'category': encodeURIComponent('MY_CATEGORY') 
    }, 
    function(response){ 
     alert('received response'); 
    } 
); 

}); 

end然後在後端解碼數據。希望它能幫助別人。

1

因爲這是谷歌與「jQuery 501(方法沒有實現)」的最佳匹配,所以當我在同一個域上遇到這個問題時,我想分享一下對我有用的東西(這不是你的問題)。

我的問題是我沒有返回有效的JSON,我只是返回「1」。因此,要解決這個問題,或者:

  • 確保返回有效的JSON,或者如果你不需要JSON響應,
  • 交換呼叫使用阿賈克斯$,而不是$ .getJSON,或
  • 如果您已經使用&阿賈克斯,刪除類型:「JSON」

希望幫助一些人。

相關問題