2012-09-04 86 views
1

我正在使用ajax从服务器获取文件,这是一个JSON格式的字符串数组。 当我按照下面的方法完成ajax请求时,jQuery会自动将JSON字符串解析为一个数组。从ajax请求获取原始文本

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

其实...... JSON是一个字符串。这不是一个对象。您可以将JSON字符串保存到localStorage。 – Ohgodwhy

+2

您是否尝试过在'text'的ajax调用中设置'dataType'? – sellmeadog

+0

Ohgodwhy,我知道,数据对象是一个数组对象,modules.php返回一个JSON字符串,在我将它保存到localStorage之前,jQuery将其解析为一个数组。 –

回答

6

按照documentation

success: function (data, textStatus, jqXHR) 

XHR对象包含了响应文本:

jqXHR.responseText 
+0

但jQuery仍然会将响应解析为一个数组(数据争论)?有没有办法避免解析它两次? –

+0

或者我可以使用'jqXHR.responseText'保存响应并使用'data'数组代替解析自己? –

+0

正如上面提出的@sellmeadog,将'dataType'设置为文本应该给你'data'参数中的实际responseText。 – ori

4

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

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

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

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

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作为一个字符串,成功的功能接受(status code, response string)的功能,以及它是否是异步的布尔值。