为什么这个使用url的ajax函数不起作用?

时间:2012-12-23 01:54:00

标签: javascript html ajax json

在身体标记下的index.html

<a href="javascript:setTempInc()">+</a> <a href="javascript:setMode(0)">-</a>

并在<head><script type="text/javascript">:

var url = "get.php";

function ajaxRequest()
{
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange = function()
    {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            var jsondata = eval("(" + xmlhttp.responseText + ")"); //retrieve result as an JavaScript object

            document.getElementById("y").innerHTML = jsondata.y;

        }
    }

    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}

function setTempInc()
{
    var oldUrl = url;
    url = url + "9001" + jsondata.y;
    ajaxRequest();
    url = oldUrl;
}

我不明白问题出在哪里。 url是一个字符串,jsondata.y是一个int,但脚本不起作用!

这个功能确实如此:

function setMode(val)
{
    var oldUrl = url;
    url = url + "91" + val + "000";
    ajaxRequest();
    url = oldUrl;
}

2 个答案:

答案 0 :(得分:2)

我会认为

var jsondata = eval("(" + xmlhttp.responseText + ")"); 

无法调用

url = url + "9001" + jsondata.y;

因为它只在ajaxRequest函数的范围内定义。

答案 1 :(得分:-1)

在函数外部设置变量,以用作全局变量!

这可能会奏效:

(function() {
    var url = "get.php";
    var oldUrl = '';
    var jsondata = '';

    function ajaxRequest()
    {
        var xmlhttp = new XMLHttpRequest();

        xmlhttp.onreadystatechange = function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                jsondata = eval("("+xmlhttp.responseText+")"); //retrieve result as an JavaScript object

                document.getElementById("y").innerHTML = jsondata.y;

            }
        }

        xmlhttp.open("GET",url,true);
        xmlhttp.send();
    }

    function setTempInc()
    {
        oldUrl = url;
        url = url + "9001" + jsondata.y;
        ajaxRequest();
        url = oldUrl;
    }
})();

添加了Closure以避免常见的安全问题