0

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

            };
4

3 回答 3

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);
  }
}

在您的代码中,您只检查返回的状态代码。上面的代码会检查就绪状态,然后输出状态码进行调试。

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

于 2013-11-01T13:15:09.843 回答
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。

于 2013-11-01T13:20:49.550 回答
0

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

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

request.onreadystatechange = function() {
    if (request.readyState==4 && request.status==200) {
        var phpMessage = request.responseText;
        alert(phpMessage);
    }
};
于 2013-11-01T13:35:19.843 回答