2013-11-01 76 views
0

我想從.php文件發送parametres到我的Javascript,但我甚至無法管理髮送字符串。我不能發送PHP變量到JavaScript

的JavaScript片段:

var params = "action=getAlbums"; 
      var request = new XMLHttpRequest(); 

      request.open("POST", PHP CODE URL, true); 
      request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      request.setRequestHeader("Content-length", params.length); 
      request.setRequestHeader("Connection", "close"); 
      request.send(params); 

      request.onreadystatechange = function() { 

        var phpmessage = request.responseText; 
        alert(phpmessage); 

      }; 

PHP片段:

$deviceFunction = $_POST["action"]; 
if ($deviceFunction == "") $deviceFunction = $_GET["action"]; 

// Go to a function depending the action required 
switch ($deviceFunction) 
{ 
    case "getAlbums": 
     getAlbumsFromDB(); 
     break; 
} 



function getAlbumsFromDB() 
{ 

    echo "test message!"; 

} 

含phpmessage警報彈出,但它是空的(它實際上出現了兩次)。如果我這樣做,警報將不會工作:

request.onreadystatechange = function() { 
       if(request.status == 200) { 
        var phpmessage = request.responseText; 
        alert(phpmessage); 
       } 

      }; 
+2

當使用Ajax,建議使用像Dojo或jQuery這樣的Javascript庫來完成繁重的工作。 –

+1

現在,有幾件事情可能會出錯。爲了縮小這個問題,我建議改變你的PHP頁面來打印字符串,沒有別的。即:<?php print'test message'; ?> –

回答

1

每次狀態更改時都會調用readystatenchange事件。有5個國家,在這裏看到:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#readyState

重寫你的JS:

request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
    console.log('AJAX finished, got ' + request.status + ' status code'); 
    console.log('Response text is: ' + request.responseText); 
    } 
} 

在你的代碼,你只檢查返回的狀態代碼。上面的代碼將檢查就緒狀態,然後輸出debbuging的狀態碼。

我知道這個答案比回答實際問題更多的評論,但我覺得寫一個答案,以包括格式良好的代碼。

+0

問題是,即使我這樣做,警報顯示爲空,而不是與我在PHP中聲明的字符串 – Phob1a

+0

@ Phob1a什麼是響應代碼?你在調用'open()'和'send()'之前是否嘗試過使用user2945107'建議來分配事件處理程序? – ComFreek

+0

我確實按照建議。你的意思是響應代碼?該警報僅打印一個空字符串。 – Phob1a

0

我在使用Django時遇到過類似的問題。我做了什麼: 我用模板語言來生成我需要的javascript變量。

我不是一個PHP程序員,但我會給你想法,讓我現在如果作品。以下不是php代碼,僅供參考。

<?php 
    <script type="text/javascript" ... > 
      SOME_VARIABLE = "{0}".format(php_function()) // php_function resolve the value you need 
    </script> 
?> 

我在腳本中使用SOME_VARIABLE。

0

請在調用打開和發送方法之前指定您的onreadystatechange事件處理程序。 您也應該根據您的請求在GET和POST方法之間進行選擇。

如果你想彈出你的信息只有當你的請求對象狀態正常(= 200)和readyState的完成蒙山響應準備(= 4),你可以這樣寫:

request.onreadystatechange = function() { 
    if (request.readyState==4 && request.status==200) { 
     var phpMessage = request.responseText; 
     alert(phpMessage); 
    } 
};