2012-11-21 32 views
0

我有一個返回一個數學問題一類的內部PHP函數:PHP返回數組一個JavaScript的Ajax調用

public function level1() { 

    //level 1 and 2 
    //single digit addition and subtraction 
    //randomly choose addition or subtraction 
    //1 = addtion, 2 - subtraction 
    $opperand = rand(1, 2); 

    //if the problem is a subtraction, the program will keep generating problems if a negative problem is generated 
    //if opperand is a subtraction, do generate both numbers while the answer is negative 

    if ($opperand == 2) 
     { 
     do { 

      //randomly generate first number 
      $number1 = rand(1, 9); 

      //randomly generate second number 
      $number2 = rand(1, 9); 

      //compute the answer 
      $answer = $number1 - $number2; 

      //change variable to actual opperand 
      $opperand = "-"; 
     } while ($answer < 0); 
     } 
    else 
     {//addition problem 
     //randomly generate first number 
     $number1 = rand(1, 9); 

     //randomly generate second number 
     $number2 = rand(1, 9); 

     //compute the answer 

     $answer = $number1 + $number2; 

     //change variable to actual opperand 
     $opperand = "+"; 
     }//end if/else 

    return array($number1 . " " . $opperand . " " . $number2 . " ", $answer); 

我打電話從ajaxHandler.php(這是我從AJAX調用)這個函數

$problemData = $MathEngine->level1(); 
    return $problemData; 

PHP將始終返回一個數組,但我無法弄清楚如何操作或甚至將結果視爲javascript中的數組。有沒有辦法做到這一點?我之前使用過標準的Get ajax調用,所以這並不新鮮。當我嘗試引用Ajax響應文本作爲一個數組,我要麼什麼也得不到(當我點擊的按鈕)或「未定義」

  var problemData = ajaxRequest.responseText; 

      alert(problemData[0]) 
+2

看看JSON – Geert

+0

你能鏈接到深入的教程嗎? – KiloJKilo

回答

2
// php - this will produce a json string 
echo json_encode(array($number1 . " " . $opperand . " " . $number2 . " ", $answer)); 

// and in javascript - parse json string to javascript object 
var problemData = JSON.parse(ajaxRequest.responseText); 
+0

我是否回顯或返回json_encode裏面的ajaxHandler.php – KiloJKilo

+0

是的,你可以。您必須使用「回聲」,「打印」或返回字符串的任何內容。 –

1

嘗試echo $problemData;沒有返回它的。 當您撥打alert(problemData[0])時出現什麼錯誤? AJAX只做捕獲字符串或JSON對象所以才做,這是返回這個數組作爲字符串,在JS分裂,或在PHP端使用陣列上json_encode

var data = problemData.split(' '); 
alert(data[0]); 
+0

我改變了回聲,它返回「<」沒有引號 – KiloJKilo

+0

這很奇怪,我得到<在Firefox和'未定義'在IE中。如果我將其更改爲[1],我會在Firefox上獲得'b'和在IE上獲得'未定義'。我看到你的編輯,我要去試試 – KiloJKilo

1

我會使用方式JSON。如果您以前從未聽說過JSON,那麼只是在語言/平臺之間來回發送內容的一種簡單方法。

在您的PHP腳本中,添加此片段以將您的數組作爲JSON編碼文本回顯。對你的AJAX請求的響應將是你迴應的任何內容。

// End of PHP script 
$problemData = $MathEngine->level1(); 
$tmpOut = '{"bind":'. json_encode(array("problemData" => $problemData)) .'}'; 
echo $tmpOut; 
exit; 

現在在您的Javascipt中,解碼您的JSON字符串。

// Javascript 
var jsonObj=eval("("+ajaxRequest.responseText+")"); 
var problemData = jsonObj.bind.problemData; 
0

可以使用JSON對象從javascript(AJAX)發送和接收數據到PHP。使用json_encode()來編碼從PHP數據,然後將其傳遞到JavaScript的html或文本的形式。然後javascript調用json_decode來檢索數據並顯示。