2012-11-28 33 views
1

我有一個JSON文件my.json具有以下內容:

{ 
    title: "My Title", 
} 

而且,一個jQuery代碼段來閱讀:

var reading_file = $.getJSON('my.json', function (data) { 
    alert('Success.'); 
} 

警告()回調內部永遠不會被調用,因爲JSON文件中存在錯誤,即title未包裝爲字符串,如"title"

在瀏覽器(Chrome)上運行時,這不會引發錯誤或任何錯誤指示。具體而言,my.json已被正確檢索(狀態碼:200),但reading_file.state()始終爲pending

我的問題:

  1. 什麼是捕捉這種類型的錯誤,即無效JSON數據/語法的好方法?
  2. function (data) { alert ... }回調裏,this是指什麼?

謝謝。

+0

我很確定'this'是指AJAX請求。 '$ .getJSON'只是以某種方式使用'$ .ajax'的快捷方式 – Ian

+0

並且從jQuery API文檔中,「從jQuery 1.4開始,如果JSON文件包含語法錯誤,請求通常會自動失敗。出於這個原因避免頻繁手動編輯JSON數據。「 – Ian

+1

爲什麼不嘗試'$ .getJSON(「url」,function(){})。error(function(jqXHR,textStatus,errorThrown){alert(textStatus +「 - 」+ errorThrown);});' – Ian

回答

5

docs

在jQuery中1.4 JSON數據以嚴格的方式解析;任何格式不正確的JSON都會被拒絕並引發解析錯誤

您將使用錯誤處理程序來捕獲錯誤。像

var reading_file = $.getJSON('my.json', function (data) { 
    alert('Success.'); 
}).error(function(jqXHR, textStatus, errorThrown) { 
    alert("Stop! Error time!"); 
}); 

更新

東西如成功回調背景下提到的Ianthis一個Ajax事件。它似乎是傳遞給$.ajax()的配置對象。

+1

Downvoter關心澄清? – Phil

+0

它應該是更多'-1/2'。 'this'不是指您鏈接到的Ajax事件。回調是一個Ajax事件。但是在這個回調中,'this'指的是傳遞給'$ .ajax'調用的'ajaxSettings'對象。 – Ian

+0

@伊恩啊,那我錯誤地閱讀了文檔。這不完全明顯,他們指的是什麼*「這是一個Ajax事件」* – Phil