1

我正在使用 ajax 从服务器获取一个文件,该文件是 JSON 格式的字符串数组。当我执行下面的 ajax 请求时,jQuery 会自动将 JSON 字符串解析为一个数组。

$.ajax({
    url: "modules.php",
    success: function (data) {
                //data is an array object not text
            }
    });

但是我想将数据保存到localStorage,它只能保存字符串。与其将数组(数据)转换回字符串,我宁愿阻止 jQuery 自动解析 JSON 字符串,保存文本然后自己解析 JSON。更像:

$.ajax({
    url: "modules.php",
    success: function (data) {
                //jQuery hasn't parsed the JSON already, and data is a string.
                localStorage.setItem("modules", data);
                var parsedData = $.parseJSON(data);
                //use the array
            }
    });
4

4 回答 4

8

根据文档

success: function (data, textStatus, jqXHR)

XHR 对象包含响应文本:

jqXHR.responseText
于 2012-09-04T20:22:24.800 回答
5

您需要使用以下dataType属性绕过 jQuery MIME 类型验证:

$.ajax({
    url: "modules.php",
    success: function (data) {
        //data is an array object not text
    },
    dataType: "html"
});
于 2012-09-04T20:23:07.447 回答
1

dataType根据文档,如果在 ajax 调用中未指定,“jQuery 将尝试根据响应的 MIME 类型推断 [数据类型]” 。

在每次调用的基础上,您可以将 添加dataType到 AsKaiser 所示的调用正文(但我会使用text而不是html)。如果您总是希望为每个 ajax 调用返回纯文本,您可以使用 jQuery 的$.ajaxSetup().

于 2012-09-04T20:30:08.613 回答
0

不要使用 JQuery!您可以对此请求使用纯 JavaScript。你试过http://www.w3schools.com/ajax吗?请参阅请求和响应。您将使用更多的代码,但它会更快,并直接给您响应。这是我写的一个包装器:

function AJAX(url, success, async) {
    if (window.XMLHttpRequest) {
        var request = new XMLHttpRequest;
    } else {
        // IE6 and IE5 (unnecessary)
        var request = new ActiveXObject("Microsoft.XMLHttp");
    }
    if (async) request.onReadyStateChange = function() {
        if (request.readyState == 4) {
            success(request.status, request.responseText);
        }
    };
    request.open("GET", url, async);
    request.send();
    if (!async) success(request.status, request.responseText);
}

该函数将 URL 作为字符串,success 函数作为函数 accepting (status code, response string),以及是否异步作为布尔值。

于 2015-08-13T13:32:18.980 回答