2015-07-13 89 views
4

我從我的PHP文件就像一個JSON響應工作:jQuery的AJAX無法與JSON響應

[ 
    {"id":"1"}, 
    {"archiveitem":"<small>26.06.2015 12:25<\/small><br \/><span class=\"label label-default\">Bug<\/span> has been submitted by Admin"} 
] 

並嘗試獲取這種反應到被點擊按鈕後一個div,但Firebug是告訴我來自錯誤處理程序的消息。我無法弄清楚問題所在?

$('#loadarchive').click(function(){ 
    $.ajax({ 
     type: 'post', 
     url: '/src/php/LoadAdminDashboardArchive.php', 
     dataType: 'json', 
     data: { 
      action : 'getArchive' 
     }, 
     success: function(results) { 
      var archiveelements = JSON.parse(results); 
      console.log(results); 
      $.each(archiveelements, function(){ 
       $('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + this.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + this.archiveitem + '</div>'); 
      }); 
     }, 
     error: function(){ 
      console.log('Cannot retrieve data.'); 
     } 
    }); 
}); 
+0

如果錯誤處理程序被擊中,則意味着來自服務器的響應不是'200 OK'。這意味着你的'responseURL'位置有錯誤。事實上,如果'responseURL'是一個變量,你應該刪除它周圍的引號。 –

+0

此響應的HTTP狀態碼是什麼? – kamituel

+0

哇,這很快:-)我對Firebug不是很熟悉,但它似乎沒有給出任何響應... responseURL不是一個變量,它只是/src/php/LoadAdminDashboardArchive.php – Quhalix89

回答

0

我能得到它的工作,問題是很簡單......

我忘了粘貼「按鈕」 - 源代碼發起Ajax請求。這是一個類型爲「submit」的輸入,因此在成功檢索響應之後默認重新加載頁面...所以e.preventDefault();是要走的路。

感謝大家。

1

如果您再深入一點,可以從控制檯獲得更多信息。或登錄這兩個參數:

error: function(xhr, mssg) { 
    console.log(xhr, mssg); 
} 
+0

哦,我不知道......它給我:\t 對象{readyState = 0,status = 0,statusText =「error」,mehr ...}錯誤 – Quhalix89

2

我試圖運行你的代碼,我得到

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data 

通過定義dataType: 'json'您的結果已經被解析爲一個數組。所以,你可以這樣做:

success: function (results) { 
    if (results["head"]["foo"] != 0) { 
     // do something 
    } else if (results["head"]["bar"] == 1) { 
     // do something 
    } 
} 

這個作品在我的電腦上:

$.ajax({ 
    type: 'post', 
    url: '/src/php/LoadAdminDashboardArchive.php', 
    dataType: 'json', 
    data: { action : 'getArchive' }, 
    success: function(results) { 
     console.log(results); 
     $.each(results, function(){ 
      $('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + this.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + this.archiveitem + '</div>'); 
     }); 
    }, 
    error: function(){ 
     console.log('Cannot retrieve data.'); 
    } 
}); 
+0

什麼工具給你這個「語法錯誤「?我沒有看到在螢火蟲..即使使用您的代碼,我得到:readyState \t 0 ResponseJSON undefined status 0 statusText「error」 – Quhalix89

+0

我用Firebug 2.0.11調試,並得到這個消息在Firebug控制檯 – Sergej

+0

可能在那裏在你的'/src/php/LoadAdminDashboardArchive.php'文件中出現錯誤,你直接調用這個URL會得到什麼迴應? – Sergej

1

首先 你的反應是不正確的,正確的反應應該是這樣的

[{ 
    "id":"1", 
    "archiveitem":"<small>26.06.2015 12:25<\/small> 
<br \/><span class=\"labellabel-default\">Bug<\/span> has been submitted by Admin" 
}, 
{ 
    ... 
}] 

你不必解析結果即。 JSON.parse不是必需的,因爲dataType:'json'可能會照顧json。

最後你成功的方法應該是這樣的:

success: function(results) { 
      $.each(results, function(ind,el){ 
       $('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + el.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + el.archiveitem + '</div>'); 
      }); 
     }, 
+0

好吧,我同意json響應格式不正確,我改變了它,現在是: [{「id」:「1」,「archiveitem」:「 26.06.2015 12:25 <\/small>
已經提交管理員「}] 我也改變了jquery部分,但錯誤仍然是一樣的... – Quhalix89

+0

@ Quhalix89使用開發人員工具中的網絡選項卡,並檢查請求是否返回正確響應 – reverbnation

+0

在firefox開發人員工具中使用網絡選項卡時,似乎單擊此按鈕只會發送一個請求到當前頁面而不是我的php-json-response-file – Quhalix89

1

至於你說的從錯誤處理消息顯示。

這意味着AJAX不會發送到服務器,因爲不正確的URL或任何其他原因。

在Firefox中使用Firebug並查看控制檯選項卡中的錯誤。

而且我看到你的代碼

dataType: 'json', 
data: { action : 'getArchive' }, 
success: function(results) { 
    var archiveelements = JSON.parse(results); 
} 

不要使用JSON.parse(results),因爲你已經寫好dataType: 'json',和任何類型的響應被自動解析。