2012-02-13 139 views
0

我有这样的代码:存储数据

function someFunction(something1, something2) { 

    $.post("execute.php", { someData1: something1, someData2: something2 }, function(data) { 

     returnData = data; 

    }); 

    return returnData; 

} 

后函数返回或真或假,我想这someFunction通过返回值进一步发送该信息,但它不工作。我猜这个返回值在它发布之前返回,所以没有定义,但我不知道该怎么做。

+1

我想应该加入一些关于AJAX请求异步性质的好答案jquery常见问题http://stackoverflow.com/tags/jquery/info – zerkms 2012-02-13 23:00:52

回答

7

ajax调用是异步的,这意味着它运行'的方式'。该函数被立即执行并返回,并且javascript继续其快乐的方式,而ajax调用被“执行”。

这就是为什么它返回undefined,因为它不是。

为了防止这种行为,您需要将其设置为'同步'。你需要在函数的范围之外定义returnData。

您可以通过设置

$.ajaxSetup({async:false}); 

,然后调用$。员额做到这一点,

或者你可以因此,使用第一种方法做$.ajax(... {async:false}...);

function someFunction(something1, something2) { 
    $.ajaxSetup({async:false}); //execute synchronously 

    var returnData = null; //define returnData outside the scope of the callback function 

    $.post("execute.php", { someData1: something1, someData2: something2 }, function(data) { 

     returnData = data; 

    }); 

    $.ajaxSetup({async:true}); //return to default setting 

    return returnData; 

} 
+1

'var returnData = null;' – zerkms 2012-02-13 23:02:22

+0

很好的答案,非常感谢,正是我需要的。解释一切。 – 2012-02-13 23:07:44

+0

建议停止使用同步呼叫,只是不要这样做。 – koullislp 2016-06-16 21:49:10