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