2012-09-04 240 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)的功能,以及它是否是異步的布爾值。