2013-04-26 38 views
11
$.ajax({ 
     url: 'http://intern-dev01:50231/api/language', 
     type: 'GET', 
     dataType: 'json', 
     success: function() { 
      console.log('It Works!'); 
     }, 
     error: function (request,status, error) { 
      console.log(error); 
      alert(status); 
     } 
    }); 

爲什麼這個ajax調用不工作?如果我在瀏覽器中調用它可以正常工作:/。Ajax呼叫火災錯誤事件,但返回200好

這是小提琴手回報:

HTTP/1.1 200 OK 
Content-Length: 122 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-HTTPAPI/2.0 
Date: Fri, 26 Apr 2013 06:56:40 GMT 

[{"LanguageId":1,"LanguageName":"Dansk"},{"LanguageId":2,"LanguageName":"Tysk"},{"LanguageId":3,"LanguageName":"Engelsk"}] 

回答

12

你必須檢查Ajax響應它是否有效。當您在阿賈克斯註明:

dataType: 'json', 

jQuery將觸發錯誤事件如果響應不能被解析爲JSON,即使服務器返回200 OK。檢查從服務器返回的數據,並確保它是有效的JSON(嘗試JSONLint服務)。

如果返回的數據不是JSON,或者它有語法錯誤,請將它們修復到您的服務器端代碼中。您可以從服務器端腳本返回{}。

也請試試這個。

$.ajax({ 
    url: 'http://intern-dev01:50231/api/language', 
    type: 'GET', 
    cache: false,   
    complete: function (xhr, status) { 
     if (status === 'error' || !xhr.responseText) { 
      console.log(error); 
      alert(status); 
     } 
     else { 
     console.log('It Works!');. 
     } 
    }   
}); 
+0

如果我使用jsonp,我會得到parseError – user2314110 2013-04-26 08:17:24

+1

@ user2314110只需刪除dataType:'json'並嘗試。看到我的編輯答案。 – 2013-04-26 08:34:06

+0

仍然只是出現提示錯誤 – user2314110 2013-04-26 22:03:19

5

由於狀態顯示200 OK,因此存在解析錯誤。問題在於數據類型:json。要測試這個,刪除該行,它應該工作。爲了解決這個問題,你可以把它改成datatype:text。 See this link too for similar question

+0

這就是爲什麼我的Symfony Dynamic Forms正在觸發錯誤事件,因爲ajax請求會返回更新後表單的html! – 2016-07-28 17:35:28

+0

我正在返回純文本而不是json。 – 2016-12-12 01:30:11

0

我知道我有點晚了,但我遇到了同樣的問題,這是Google上的頂級搜索結果之一。我設法通過上述網址,移動數據類型這樣來解決它:

$.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    url: 'http://intern-dev01:50231/api/language', 
    success: function() { 
     console.log('It Works!'); 
    }, 
    error: function (request,status, error) { 
     console.log(error); 
     alert(status); 
    } 
}); 
+3

它基本上是一個關鍵的價值對,所以它應該不是真正重要的預結構方式。如果dataType鍵在其他鍵之前或之後,我認爲不管這個請求對象是什麼構建的。它只是構造它。這裏的目標是找到真正的原因。 – 2016-07-14 18:39:50

0

如果在本地用不同的Web應用程序和Web API應用程序的測試,然後調試應用程序和測試API正確地發送數據和應用程序調用API通過AJAX並返回數據。

由於運行的應用程序AJAX調用沒有打到成功函數時域不相似。因爲瀏覽器可以防止Cross Site request。如果你在本地發佈這兩個應用程序並進行調試,那麼它工作正常。

希望這會有幫助的人。

0

檢查url參數並確保其與加載的頁面相同。您可能正在進行跨域的Ajax調用。如果您想要進行跨域的Ajax調用,請注意允許進行跨域請求的唯一數據類型是「腳本」和「jsonp」。

在開發環境中遇到此問題,其中URL是IP地址,頁面加載了指向該IP的域名。