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