我无法将PHP变量发送到JavaScript

时间:2013-11-01 13:05:45

标签: javascript php

我正在尝试将.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);
                }

            };

3 个答案:

答案 0 :(得分: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的状态代码。

我知道这个答案更多的是评论,而不是对实际问题的回答,但我觉得要写一个答案,以便包含格式良好的代码。

答案 1 :(得分:0)

我遇到了与Django一样的问题。我做了什么: 我使用模板语言生成我需要的javascript变量。

我不是PHP程序员,但我会给你一个想法,如果有效,现在让我。以下不是php代码,只是为了ilustrate。

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

我在脚本中使用了SOME_VARIABLE。

答案 2 :(得分:0)

请在调用open和send方法之前指定onreadystatechange事件处理程序。 您还应该根据请求在GET和POST方法之间做出选择。

如果只想在请求对象状态为OK(= 200)并且readyState在响应就绪(= 4)时完成时弹出消息,则可以写:

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