我使用jQuery' getJSON
调用来恢复名为my.json
的文件中的内容。
现在有时JSON文件包含某个字符,这会使语法无效。不幸的是,我无权改变这一点。
我认为在$ .getJSON()读取它之前使用success
事件拦截JSON字符串并对其进行dix很容易,因为语法无效。显然,它并不像我想的那么容易。
我很感激,如果有人可以帮我修复下面的代码。
$.ajaxSetup({
beforeSend: function(xhr){
if (xhr.overrideMimeType) {
xhr.overrideMimeType("application/json");
}},
cache: false
});
$.getJSON("my.json", function(data){
// Do something with the JSON
console.log("JSON object: " + data);
}).success(function(data, textStatus, jqXHR) {
// Intercept JSON string and modify it.
var fixed_json = fix_json(jqXHR.responseText);
jqXHR.responseText = fixed_json; // Obviously not as simple as I thought.
});
答案 0 :(得分:1)
您可以使用success
的{{1}}回调对返回的数据进行必要的检查。它需要您将$.ajax()
设置为dataType
,以便jQuery不会尝试自动为您解析它。试试这个:
text
根据$.ajax({
url: "my.json",
dataType: 'text',
success: function(data) {
var obj;
try {
obj = JSON.parse(data);
}
catch(e) {
obj = fix_json(data);
}
// work with the object here...
})
});
所做的工作,并假设它总是返回一个对象,你可以直接调用它并删除try / catch。