我想在PHP中初始化一个条件并将其发送给JavaScript读取。
目前,我有这段代码:
if ($totalResults > MAX_RESULT_ALL_PAGES) {
$queryUrl = AMAZON_SEARCH_URL .
$searchMonthUrlParam .
$searchYearUrlParam .
$searchTypeUrlParam .
urlencode( $keyword ) .
'&page=' . $pageNum;
} else {
$queryUrl = AMAZON_TOTAL_BOOKS_COUNT .
$searchMonthUrlParam .
$searchYearUrlParam .
$searchTypeUrlParam .
urlencode($keyword) .
"&page=" . $pageNum;
$flagQuery = TRUE;
echo $flagQuery;
}
<script>
function getFlagValue() {
var xmlHttp;
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState==4 && xmlHttp.status==200) {
alert(xmlHttp.responseText);
}
};
xmlHttp.open("GET","getAmazonResult.php",true);
xmlHttp.send();
}
var flagQuery = new Boolean();
flagQuery = getFlagValue();
alert(flagQuery);
</script>
我似乎无法在JavaScript中检索Flag。
答案 0 :(得分:4)
我发现了为什么我的Flag显示未定义。 只是发出一个警告(flagQuery)布尔值不起作用。
我将我的代码与Jan Turon的代码结合起来,实现了这个目标
function getFlagValue() {
var xmlHttp = new HmlHttpRequest();
xmlHttp.onload = function() {
if (xmlHttp.status==200) yourCustomHandler(xmlHttp.responseText);
};
xmlHttp.open("GET","getAmazonResult.php",true);
xmlHttp.send();
}
function yourCustomHandler(response) {
flagQuery = response;
alert(flagQuery);
}
flagQuery = getFlagValue();
if (flagQuery = true) {
alert ("Flag = TRUE");
}
else {
alert ("Flag = FALSE");
}
现在我看看旗帜是真还是假
答案 1 :(得分:1)
从PHP代码中取消注释echo $flagQuery
并将其更改为
echo $flagQuery ? 1 : 0;
因为false
没有回应。
A 代表AJAX中的异步。因此,在您的javascript中,您需要在onreadystatechange
事件中设置标志var:
function getFlagValue() {
var xmlHttp = new HmlHttpRequest();
xmlHttp.onload = function() {
if (xmlHttp.status==200) yourCustomHandler(xmlHttp.responseText);
};
xmlHttp.open("GET","getAmazonResult.php",true);
xmlHttp.send();
}
function yourCustomHandler(response) {
flagQuery = response;
alert(flagQuery);
}
如果您将代码设置为false
作为第三个参数,那么您的代码也会有效:
xmlHttp.open("GET","getAmazonResult.php",false)
如果你从getValue()函数执行return
responseText,但我不推荐它,因为网络通信可能会失败而你的javascript会冻结。
顺便说一句:您不需要为ActiveXObject
遗留代码see here而烦恼。还看一下XHR2:我在答案中更新了你的XHR2标准的JS代码),如你所见,它要短得多。
哦,你的PHP中有一个小错误,你需要每次都回显一下flagQuery:
if ($totalResults > MAX_RESULT_ALL_PAGES) {
$queryUrl = ...
$flagQuery = FALSE;
} else {
$queryUrl = ...
$flagQuery = TRUE;
}
echo $flagQuery ? 1 : 0; // outside of the if-else block