我的代码遇到一个小问题。我正在向我的页面发送POST请求,在完成后它应该返回“OK”,这意味着它有效。从我的处理函数里面我调用set_var(data)来设置我的全局变量文本,但问题是我的print_info()返回undefined。
我花了很多时间在这上面,并意识到我的问题与某种方式有关,但我不知道如何解决它。如果有人能提供任何指示,那就太好了。
<?
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>
答案 0 :(得分:2)
您的问题是由于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;
});
答案 1 :(得分:2)
$.post()
时,ajax_post
函数的执行会或多或少立即以其快乐的方式继续执行,而无需等待请求完成。在return_handler
运行以设置全局变量之前,您将进入“返回”警报。
您可以使用jQuery.ajax
并将async
选项设置为false
,这样可以获得同步请求。
或者,我推荐这个策略,只有在请求成功处理程序完成后才会移动所有需要的东西。