Javascript 为什么';这个使用url的ajax函数不能工作吗?

Javascript 为什么';这个使用url的ajax函数不能工作吗?,javascript,html,ajax,json,Javascript,Html,Ajax,Json,在body标记下的index.html中: <a href="javascript:setTempInc()">+</a> <a href="javascript:setMode(0)">-</a> 我不明白问题出在哪里url是一个字符串,jsondata.y是一个int,但脚本不起作用 但是,此函数执行以下操作: function setMode(val) { var oldUrl = url; url = url + "91"

在body标记下的
index.html
中:

<a href="javascript:setTempInc()">+</a> <a href="javascript:setMode(0)">-</a>
我不明白问题出在哪里
url
是一个字符串,
jsondata.y
是一个int,但脚本不起作用

但是,此函数执行以下操作:

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

var jsondata = eval("(" + xmlhttp.responseText + ")"); 
无法在上调用

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

因为它仅在函数的作用域内定义。

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

这可能会奏效:

(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
以避免常见的安全问题

改进您的问题标题,这样,更多的人可以帮助您!请提供您收到的错误。您是否检查了javascript控制台中的错误?您使用的是哪个浏览器?实际上,范围甚至更小:
onreadystatechange
处理程序。我没有提供下一票,但我认为这是因为a)你没有通过这样做添加任何东西,b)全局变量应该像瘟疫一样避免。@MartyWallace这解决了问题,而且,没有全局变量我什么都做不了,在这种情况下,@MartyWallace添加了
闭包
,因此,全局变量将“更安全”。这并不是真正的安全问题,如果一切都是全局的(冲突等),则只会出现代码可维护性问题。
(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;
    }
})();