[英]I can't send PHP variables to 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);
}
};
每当状态更改时,都会调用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);
}
}
在您的代码中,您仅检查返回的状态代码。 上面的代码将检查就绪状态,然后输出状态代码以进行调试。
我知道这个答案比实际问题的答案更能说明问题,但是我觉得写一个答案是为了包含格式正确的代码。
我在使用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。
在调用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);
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.