2015-09-04 83 views
3

我需要從外部文件獲取數據;我試圖做出一個Ajax請求,但我似乎只是將所有的數據作爲一個字符串。我無法使用JSON.parse;我得到'未捕獲的SyntaxError:意外的令牌'xmlhttp.onreadystatechange'。我知道這可能是因爲我沒有獲取JSON數據。這是我到目前爲止有:我可以在外部數組中使用JavaScript JSON.parse嗎?

function loadXMLDoc() { 
    var xmlhttp; 
    if (window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } else { 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      var data = xmlhttp.responseText; 
      var jn = JSON.parse(data); 
      document.getElementById("output").innerHTML = jn; 
     } 
    } 
    xmlhttp.open("GET", "Users.php", true); 
    xmlhttp.send(); 
} 
window.onload = loadXMLDoc; 

這是我從「Users.php」獲得作爲一個字符串,而不是作爲一個數組:

[['@user1',238,'img/user1.jpeg'],['@user2',220,'img/user2.jpeg'],['@user3',180,'img/user1.jpeg']] 

如何獲取所有數據從字符串中,或​​將其變成一個數組?我甚至嘗試過使用分割功能,但我無法正確理解。

謝謝你的幫助!

+2

爲什麼'jquery'標籤? – Andreas

+1

你不能返回有效的JSON嗎?你可以嘗試eval(),但它真的不是一個很好的練習,它會返回一個數組數組。 – PEM

回答

-2

也許這是一項工作,但它有可能逃避字符串中的引號?然後它將能夠解析。

例子:發送從PHP以下回應:

[[\"@user1\",238,\"img/user1.jpeg\"],[\"@user2\",220,\"img/user2.jpeg\"]] 

然後,它應該能夠使用JSON.parse()來

只要確保你沒有換行符在你的迴應解析。

+0

['json_encode()'](http://php.net/manual/en/function.json-encode.php) – Andreas

+0

爲什麼不用你所有的變量創建一個標準的PHP數組並使用'json_encode()'作爲@安德烈亞斯建議。這個答案的建議會好得多。它將被正確格式化,並且不需要轉義雙引號,就像這樣! – mic

0

更新

如果您在Users.php的掌控權,那麼你可以使用json_encode()上的數據解決問題。這將使使用雙引號包裹字符串和導致正是我下面提出不更換()

以前

JSON將字符串用雙,而不是單引號包圍。

所以一個黑客會JSON.parse(data.replace("'", '"'))

你當然可以絆倒如果有返回的字符串中的雙引號或轉義單引號。

相關問題