将标志从PHP发送到JavaScript

时间:2014-02-05 09:50:19

标签: javascript php flags

我想在PHP中初始化一个条件并将其发送给JavaScript读取。

目前,我有这段代码:

PHP

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

的JavaScript

<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。

2 个答案:

答案 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