簡體   English   中英

使用jQuery和/或Javascript報告JSON對象中的語法錯誤

[英]Reporting syntax errors in a JSON object with jQuery and/or Javascript

當我使用jQuery加載JSON提要時報告語法錯誤的最佳方法是什么? 我可以像這樣建立錯誤報告設置:

error: function(xhr){
    alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
}

但是,當我調用的URL加載有效頁面時,此函數不會觸發(盡管其中沒有一個帶有JSON對象的頁面)。 此外,我無法檢查它確實返回的數據,因為(至少根據Firebug) jQuery.getJSON在將對象傳遞給執行它的函數之前中斷了語法錯誤。

我想報告錯誤的原因是因為這是我檢查用戶是否提供了將生成有效JSON提要的URL的方法。

這是一個相關的答案,需要控制服務器將響應什么 這是Firebug給我的語法錯誤Firebug給我的語法錯誤http://img.skitch.com/20090623-8c97g47jha4mn6adqqtjd41cwy.jpg

有任何想法嗎? 謝謝

您可以將函數綁定到全局ajaxerror事件

$(document).ajaxError(function(event, request, ajaxOptions, thrownError){
  if ( 4==request.readyState) { // failed after data has received
    alert(ajaxOptions['url'] + " did not return valid json data");
  }
  else {
    alert("something else wnet wrong");
  }
});
或使用$ .ajax()而不是$ .getJSON()
 function foo() { // $.getJSON(" http://localhost/test.txt ", function(data){}); $.ajax({ type: "GET", url: " http://localhost/test.txt ", success: function (data, textStatus) { alert("succuess"); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("request failed: " + textStatus); }, dataType: "json" }); } 

編輯:但你可能要記住, ajax(dataType:“json”)getJSON() (只是調用.ajax(dataType:“json”)歸結為data = window["eval"]("(" + data + ")") ...如果您不知道腳本請求的(任意)數據,這可能不是您想要的。這可以解釋為什么firebug在您提供它時會捕獲語法錯誤html文檔而不是json數據。
在這種情況下,更好的請求dataType:“string”並通過完全成熟的json解析器lib運行數據。

感謝所有回答的人。 因為我從外部域調用JSON提要,所以我無法僅使用jQuery的AJAX功能並將提要作為“文本”而不​​是“json”。 jQuery只允許你從遠程源中提取“json”和“script”。

我最終做的是編寫一個PHP腳本來進行我自己的服務器上的外部調用。 我使用jQuery AJAX來調用它,在URL中傳遞請求的源,然后將其作為“文本”獲取。 然后我運行自己的檢查以確保它是正確格式化的JSON,然后用另一個庫解析它。 jQuery目前無法解析JSON; $ .getJSON僅在您向其傳遞URL時才有效。

直接在瀏覽器的地址欄中調用URL或XHR請求,執行view-source並將結果粘貼到了解JavaScript的IDE中。 你可能會發現一個錯位的報價或其他東西。

至少你可以刪除它的塊,直到找到令人討厭的語法,如果沒有別的。

添加到Diodeus的答案,將您可能有問題的JSON粘貼到此工具中: http//jsonformatter.curiousconcept.com/

如果你有螢火蟲,你甚至可以通過編程方式一起破解一種使用網站服務的方式,盡管這可能是不贊成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM