function that return a value from ajax call request
本问题已经有最佳答案,请猛点这里访问。
我想要一个从ajax请求返回值的函数。 我想停止javascript执行,直到函数获取其值由ajax异步请求返回。
就像是:
1 2 3 4 5 6 7 8 9 10 11 12 | function myFunction() { var data; $.ajax({ url: 'url', data: 'data to send', success: function (resp) { data = resp; }, error: function () {} }); // ajax asynchronus request return data; // return data from the ajax request } |
你需要注册一个回调函数,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function test() { myFunction(function(d) { //processing the data console.log(d); }); } function myFunction(callback) { var data; $.ajax({ url: 'url', data: 'data to send', success: function (resp) { data = resp; callback(data); }, error: function () {} }); // ajax asynchronus request //the following line wouldn't work, since the function returns immediately //return data; // return data from the ajax request } |
Ajax是异步的,这意味着调度了ajax调用,但是你的代码在不停止的情况下继续像以前一样运行。 在收到响应之前,Ajax不会停止/暂停执行。 你必须添加一个额外的回调函数或类似的东西。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function myFunction() { var data; $.ajax({ url: 'url', data: 'data to send', async: false, success: function (resp) { data = resp; callback.call(data); }, error: function () {} }); // ajax asynchronus request return data; // return data from the ajax request } |
你需要做asyn = False,如:
1 2 3 4 5 6 7 | $.ajax({ async: false, // ... success: function(jsonData) { //Your Logic } }); |
1 2 3 4 5 6 7 8 9 | $.ajax({ url: 'url', data: 'data to send', async: false, success: function (resp) { data = resp; }, error: function () {} }); // ajax synchronus request |
因为Ajax是异步的,所以使用
将async设置为false意味着您调用的语句必须在函数中的下一个语句被调用之前完成。 如果设置async:true,则该语句将开始执行,并且无论异步语句是否已完成,都将调用下一个语句。
来自jQuery文档:
By default, all requests are sent asynchronously (i.e. this is set to
true by default). If you need synchronous requests, set this option to
false