2010-08-26 110 views
1

我終於成功地使用Ajax將SOMETHING從一個頁面發送到另一個頁面!我正在試圖做的是通過從一個PHP文件中的JavaScript文件的陣列,以及JavaScript文件在this.responseText收到此:從Ajax請求解碼JSON數組

<html> 
<head> 

    <script type="text/javascript"> 
     var jsonArray = ["chickens","horses","cows","werewolves","zombies","vampires","phantoms","U.S. Congressmen","performance artists","pieces of fencepost","barnhouses","robots","cyborgs"] 

    </script> 
</head> 
</html> 

我試圖運行eval()alert荷蘭國際集團的結果,但沒有結果出現。我如何從this.responseText成功提取數組?

編輯這是迄今爲止我的功能:

/* 
* Function: selectVictim 
* Called from function laserOn() 
* 
* Selects a random victim from a list of victims 
* 
* @return String: victim 
*/ 
function selectVictim() 
{ 
var params = "url=queenofsheep.com/Sheep/victims.php"; 
var request = new ajaxRequest(); 

request.open("POST", "victims.php", true); 
request.setRequestHeader("Content-Type", 
          "application/x-www-form-urlencoded"); 
request.setRequestHeader("Content-Length", params.length); 
request.setRequestHeader("Connection", "close"); 

request.onreadystatechange = function() 
{ 
    if (this.readyState == 4) 
    { 
     if (this.status == 200) 
     { 
      if (this.responseText != null) 
      { 
       var vicArray = eval('('+this.responseText+')'); 
       var numVic = Math.floor(Math.random() * (vicArray - 1)); 
       alert(vicArray); 
      } 
      else alert("Ajax error: No data received"); 
     } 
     else alert("Ajax Error: " + this.statusText); 
    } 
} 

request.send(params); 
}  

其次編輯包含數組(用PHP)的文件如下:

<html> 
<head> 
<?php 

$victims = array(

    // Animals 
    "chickens", 
    "horses", 
    "cows", 

    // Supernatural 
    "werewolves", 
    "zombies", 
    "vampires", 
    "phantoms", 

    // Human 
    "U.S. Congressmen", 
    "performance artists", 

    // Inanimate, non-mechanical 
    "pieces of fencepost", 
    "barnhouses", 

    // Mechanical 
    "robots", 
    "cyborgs" 

); 

?> 

    <script type="text/javascript"> 
     var jsonArray = <?php echo json_encode($victims); ?> 


    </script> 
</head> 
</html> 
+0

你取回一個HTTP 200狀態碼回來?使用螢火蟲,以確定是否是腳本沒有返回或呼叫完全失敗的問題。 – 2010-08-26 15:40:01

回答

1

如果你的php頁面正在返回你報告的所有文本(使用< html> etc ...),那麼你的輸出不是JSON對象,而是一個html頁面。您的回答應該只包含你的序列化JSON對象(和適當的HTTP響應頭)...

一旦你「乾淨」你的輸出,你可以使用JSON2庫來解析你的對象: http://www.json.org/js.html

var myObject = JSON.parse(myJSONtext); 
0

您可以使用該庫在json.org或使用eval(「(」+ this.responseText +「)」);

通常,您希望使用庫來解析JSON字符串而不是eval,因爲eval通常是不安全的。

1

這看起來不像服務器的正確JSON響應,因爲它包含HTML代碼,然後是一大塊javascript。響應應該只包含包含數據的javascript代碼,如

var data = ["chickens","horses","cows","werewolves","zombies"]"; 

然後您可以eval()該字符串,它將工作。如上所述,eval()可能不安全,因此,如果使用jQuery,則可以使用安全的$.parseJSON函數。

要正確返回JSON,不輸出HTML的所有頁面,只是像做

<?php 

    $victims = ...; // fill array 

    echo json_encode($victims); 
?> 
+0

好的,所以我把數組放在一個.json文件中,但是現在eval會提供'undefined'。 – Andy 2010-08-26 15:54:00

+0

我不確定'我把數組放在json文件中'是什麼意思。 victim.php文件應該對發佈數據進行任何處理,然後僅回傳JSON數據。您還應該將響應類型設置爲「text/json」。 使用firebug mozilla擴展來檢查你發送的內容和你正在接收的內容,ajax調用應該只返回逃脫的javascript代碼 – 2010-08-26 16:25:50