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

Intercept and modify JSON string before jQuery.getJSON() does its thing

本文关键字:修改 字符串 JSON getJSON jQuery 操作 执行      更新时间:2023-09-26

我使用jQuery的getJSON调用从名为my.json的文件中重新获取内容。

现在,有时JSON文件包含某个字符,这会使语法无效。不幸的是,我无法改变这一点。

我认为在$.getJSON()读取JSON字符串并由于语法无效而失败之前,使用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.
});

您可以使用$.ajax()success回调来对返回的数据进行所需的检查。不过,它需要将dataType设置为text,这样jQuery就不会尝试自动为您解析它。试试这个:

$.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...
    })
});

小提琴示例

根据fix_json所做的工作,并假设它总是返回一个对象,您可以直接调用它并删除try/catch。