2013-12-03 42 views
0

我使用以下的jQuery進行Ajax調用:阿賈克斯.done()無數據

$.ajax({ 
    url: "/projects/project/xGetProjectStatus", 
    type: "GET", 
    dataType: "json"}) 
    .done(function(request){ 
      alert(request.responseText); 
      var data = JSON.parse(request.responseText); 
      if(data.success){ 
        //stuff here 
      } 
}) 

警報彈出總是說responseText的是不確定的。我是「得到」的頁面格式良好的JSON,如果我在控制檯中運行這些命令一次一切正常。哪裏不對?

+1

'console.log(request)'說什麼? – PSL

+0

'request'沒有'responseText'屬性,除非你在服務器端給它一個。 –

+1

@KevinB我知道... :)我問OP打印它....所以會意識到他得到的是他期望的'responseText',但是作爲解析對象。 – PSL

回答

2

您正在尋找responseText的迴應,它不會在那裏。您可以在jqXHR對象本身找到它(這是第三個傳遞給您的done()函數的參數,也是您的整個$.ajax()調用返回的)。

而且因爲您有dataType: "json",所以響應已經是JSON解析對象。

更改此:

.done(function(request){ 
    alert(request.responseText); 
    var data = JSON.parse(request.responseText); 
    if(data.success){ 
      //stuff here 
    } 
}) 

爲了眼前這個:

.done(function(data){ 
    if(data.success){ 
      //stuff here 
    } 
}) 
0

當您將dataType設置爲jQuery.ajax調用時,它將作爲解析對象返回。所以你request對象.done實際上是你解析json

如果你不想jQuery自動解析您的JSON,你可以從通話中刪除的數據類型。

$.ajax({ 
    url: "/projects/project/xGetProjectStatus", 
    type: "GET" 
}).done(function(request){ 
    alert(request.responseText); 
    var data = JSON.parse(request.responseText); 
    if(data.success){ 
     //stuff here 
    } 
}) 
+0

刪除'dataType'不會使代碼正常工作。首先,如果您不提供'dataType',jQuery將嘗試根據MIME類型進行猜測。如果URL返回一個「Content-type:application/json」頭文件,那麼jQuery將會爲你解析它。其次,'responseText'屬性位於'jqXHR'對象上,它是* NOT *第一個參數。它應該是第三個參數:'.done(function(data,status,jqXHR){})'。 –

0

這是因爲做函數的第一個參數是不是XHR對象,但這個responseText的作爲對象已經內容。 jQuery爲你處理所有這些,所以不需要做任何手動轉換。

只要ajax調用成功,就調用done函數,因此不需要重新檢查它,並且在返回200以外的響應時調用失敗函數。

+0

如果成功,他不會「重新檢查」。他正在檢查從AJAX調用中檢索到的對象的'success'屬性。 –

+1

呵呵,好吧,我個人更喜歡使用狀態代碼來指示操作是否成功,而不是將它作爲布爾傳遞給json對象。如果操作成功,則返回200,如果出現問題,則返回其他40x狀態碼。通過移除像這樣的移動信息到頭部來減少有效載荷大小。 – Nemesis02