从ajax请求中获取原始文本

Get raw text from ajax request

本文关键字:原始 文本 获取 ajax 请求      更新时间:2023-09-26

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

根据文件

success: function (data, textStatus, jqXHR)

XHR对象包含响应文本:

jqXHR.responseText

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

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

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

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

不要使用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作为字符串,将成功函数作为接受(status code, response string)的函数,以及它是否异步为布尔值。