Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否从AJAX函数中修改外部变量?_Php_Javascript_Jquery_Ajax_Function - Fatal编程技术网

Php 是否从AJAX函数中修改外部变量?

Php 是否从AJAX函数中修改外部变量?,php,javascript,jquery,ajax,function,Php,Javascript,Jquery,Ajax,Function,我使用AJAX请求从数据库中获取数值。AJAX函数位于另一个函数中,该函数应返回AJAX请求的值。但是,由于AJAX请求的返回值是xmlhttp.onreadystatechange函数中的一个局部变量,因此它不会更改return\u count函数的“更高级别”temp\u返回。我无法让“lower”函数返回值并将其分配给变量,因为它已定义为xmlhttp.onreadystatechange。。。如何更改此值,使return_count函数返回正确的值,而不是42(为测试目的而预定义) 你可

我使用AJAX请求从数据库中获取数值。AJAX函数位于另一个函数中,该函数应返回AJAX请求的值。但是,由于AJAX请求的返回值是xmlhttp.onreadystatechange函数中的一个局部变量,因此它不会更改return\u count函数的“更高级别”temp\u返回。我无法让“lower”函数返回值并将其分配给变量,因为它已定义为xmlhttp.onreadystatechange。。。如何更改此值,使return_count函数返回正确的值,而不是42(为测试目的而预定义)


你可以用两种方法来做

对您进行回调ajax(推荐)

创建异步回调以继续您的流程;D

function return_count(ajax_userid,ajax_date,ajax_KT,ajax_KS, callback)
{   
    var otherCallback;
    var temp_return = 42;
    xmlhttp.onreadystatechange =
    function()
    {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            temp_return = xmlhttp.responseText;
            if(typeof callback === "function" ) callback(temp_return);
            if(typeof otherCallback === "function" ) otherCallback(temp_return);
        }
    }
    xmlhttp.open("GET", "count.php?userid="+ajax_userid+"&date="+ajax_date+"&KT="+ajax_KT+"&KS="+ajax_KS, true);
    xmlhttp.send();

    return { done: function (callback2){
          otherCallback = callback2;

    } };
}
你可以用下面这样的方式

参数回调

return_count( userid, date, KT, KS, function (count) {

     alert("returned " + count);
}))

或管道回调

    return_count( userid, date, KT, KS)
    .done( function (count) {

         alert("returned " + count);

     });
制作同步ajax

正在将“false”添加到标记async

function return_count(ajax_userid,ajax_date,ajax_KT,ajax_KS)
{
    var temp_return = 42;
    xmlhttp.onreadystatechange =
    function()
    {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            temp_return = xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", "count.php?userid="+ajax_userid+"&date="+ajax_date+"&KT="+ajax_KT+"&KS="+ajax_KS, false);
    xmlhttp.send();
    return temp_return;
}

但是这种方法会锁定你的用户界面,对用户体验不好。

你可以用两种方法来实现

对您进行回调ajax(推荐)

创建异步回调以继续您的流程;D

function return_count(ajax_userid,ajax_date,ajax_KT,ajax_KS, callback)
{   
    var otherCallback;
    var temp_return = 42;
    xmlhttp.onreadystatechange =
    function()
    {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            temp_return = xmlhttp.responseText;
            if(typeof callback === "function" ) callback(temp_return);
            if(typeof otherCallback === "function" ) otherCallback(temp_return);
        }
    }
    xmlhttp.open("GET", "count.php?userid="+ajax_userid+"&date="+ajax_date+"&KT="+ajax_KT+"&KS="+ajax_KS, true);
    xmlhttp.send();

    return { done: function (callback2){
          otherCallback = callback2;

    } };
}
你可以用下面这样的方式

参数回调

return_count( userid, date, KT, KS, function (count) {

     alert("returned " + count);
}))

或管道回调

    return_count( userid, date, KT, KS)
    .done( function (count) {

         alert("returned " + count);

     });
制作同步ajax

正在将“false”添加到标记async

function return_count(ajax_userid,ajax_date,ajax_KT,ajax_KS)
{
    var temp_return = 42;
    xmlhttp.onreadystatechange =
    function()
    {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            temp_return = xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", "count.php?userid="+ajax_userid+"&date="+ajax_date+"&KT="+ajax_KT+"&KS="+ajax_KS, false);
    xmlhttp.send();
    return temp_return;
}

但是这种方法会锁定用户界面,对用户体验不利。

发出ajax请求,如果不想阻止页面,则需要调用函数而不是返回。ajax中的A代表异步,不能从ajax调用中返回变量,需要通过回调函数(通常作为ajax的参数传递)来使用它“major”函数),该函数只有一个参数(返回的数据,在本例中为
xmlhttp.responseText
)并将使用该参数调用。的可能重复项似乎我需要提高我的搜索技能,我的第一次搜索没有显示任何可以轻松应用于我的特定问题的结果。感谢您为我指出其他问题/答案。提出ajax请求,如果不想阻止页面,您需要调用函数启用而不是返回。AJAX中的A代表异步,您不能从AJAX调用返回变量,您需要通过回调函数(通常作为AJAX“major”函数的参数传递)使用它,该函数只有一个参数(返回的数据,在本例中为
xmlhttp.responseText
)并将使用该参数调用。的可能重复项似乎我需要提高一下搜索技能,我的第一次搜索没有显示任何可以轻松应用于我的特定问题的结果。感谢您为我指出其他问题/答案。