Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ajax 使用$.post的Jquery和范围问题_Ajax_Jquery - Fatal编程技术网

Ajax 使用$.post的Jquery和范围问题

Ajax 使用$.post的Jquery和范围问题,ajax,jquery,Ajax,Jquery,我的代码有一个小问题。我正在向我的页面发送一个POST请求,在我完成后,它应该返回“OK”,这意味着它成功了。在处理函数中,我调用set_var(data)来设置全局变量文本,但问题是print_info()返回未定义的文本 我在这方面花了很多时间,意识到我的问题与范围界定有关,但我不确定如何着手解决它。如果有人能提供一些建议,那就太好了 <? if($_REQUEST['action'] == 'test') { echo "OK"; die; } ?> <

我的代码有一个小问题。我正在向我的页面发送一个POST请求,在我完成后,它应该返回“OK”,这意味着它成功了。在处理函数中,我调用set_var(data)来设置全局变量文本,但问题是print_info()返回未定义的文本

我在这方面花了很多时间,意识到我的问题与范围界定有关,但我不确定如何着手解决它。如果有人能提供一些建议,那就太好了

<?
if($_REQUEST['action'] == 'test')
{
    echo "OK";
    die;
}

?>

<script type="text/javascript" src="jquery-1.6.1.js" ></script>

<script type="text/javascript">
var ajax_post_result;

function set_var(data)
{
    //PRINTS MY TEXT OK
    alert("SET:: " + data);

    //SET TO MY GLOBAL VARIABLE
    ajax_post_result = data;

    //ALSO PRINTS OK
    alert("SET2:: " + ajax_post_result);
}

function return_handler(data, textStatus)
{
    //THESE BOTH WORK ... BUT ONLY HERE AND WITHIN set_var()
    //alert("1: " + data); //PRINTS WHAT I NEED

    //CALL FUNCTION TO SET GLOBAL VARIABLE
    set_var(data);
}

function print_info()
{
    return ajax_post_result;
}

function ajax_post(file, data )
{
    $.post( file, data, return_handler);

    //PRINTS UNDEFINED
    alert("RETURN:: " + print_info() );
}

</script>

<form id=newform name='testform'>
<input type="hidden" name="newexample" value="1">
Enter Something: <input name="something" id='something1' value="" type="text">
<input type="button" value="Submit" name="Submit" onclick="ajax_post('index.php?action=test', $('#newform').serialize() ); return false;">
</form>

var ajax_post_结果;
函数集变量(数据)
{
//打印我的文本好吗
警报(“设置::”+数据);
//设置为我的全局变量
ajax\u post\u结果=数据;
//也可以打印
警报(“SET2::”+ajax\u post\u结果);
}
函数返回\u处理程序(数据、文本状态)
{
//这两种方法都有效……但只在这里和set_var()内有效
//警报(“1:+数据);//打印我需要的内容
//调用函数来设置全局变量
设置变量(数据);
}
函数print_info()
{
返回ajax\u post\u结果;
}
函数ajax_post(文件、数据)
{
$.post(文件、数据、返回处理程序);
//未定义的打印
警报(“返回::”+print_info());
}
输入以下内容:

您的问题是由于AJAX的异步特性造成的

您应该在回调函数中完成所有AJAX后处理。类似这样的内容(使用当前函数)

尽管您可以轻松地将功能组合到一个闭包中(减去警报),例如


您的问题是由于AJAX的异步特性造成的

您应该在回调函数中完成所有AJAX后处理。类似这样的内容(使用当前函数)

尽管您可以轻松地将功能组合到一个闭包中(减去警报),例如


AJAX请求是异步的,首字母缩略词中的第一个A就是证明。因此,当您调用
$.post()
时,
ajax\u post
函数的执行或多或少会立即继续,而不必等待请求完成。在运行
RETURN\u处理程序设置全局变量之前,您会收到“RETURN”警报

您可以使用
jQuery.ajax
并将
async
选项设置为
false
,这将获得一个同步请求


或者,我建议采用这种策略,只在请求完成后将所有需要发生的事情移动到成功处理程序。

AJAX请求是异步的,首字母缩略词中的第一个A就是证明。因此,当您调用
$.post()
时,
ajax\u post
函数的执行或多或少会立即继续,而不必等待请求完成。在运行
RETURN\u处理程序设置全局变量之前,您会收到“RETURN”警报

您可以使用
jQuery.ajax
并将
async
选项设置为
false
,这将获得一个同步请求


或者,我建议采用这种策略,只在请求完成后才将所有需要发生的事情移动到成功处理程序。

谢谢,我切换到使用$.ajax,现在一切正常。谢谢,我切换到使用$.ajax,现在一切正常。
$.post(file, data, function(data, textstatus) {
    return_handler(data, textstatus);
    alert("RETURN:: " + print_info());
});
$.post(file, data, function(data, textstatus) {
    ajax_post_result = data;
});