在jQuery.getJSON()执行其操作之前拦截并修改JSON字符串

时间:2016-01-07 11:35:11

标签: javascript jquery ajax

我使用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.
});

1 个答案:

答案 0 :(得分:1)

您可以使用success的{​​{1}}回调对返回的数据进行必要的检查。它需要您将$.ajax()设置为dataType,以便jQuery不会尝试自动为您解析它。试试这个:

text

Example fiddle

根据$.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。