[英]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.