2016-09-23 64 views
0

我有一个jQuery代码看起来像下面jQuery的:Ajax不是被称为第一

function get_data_obj(){ 
    var dataObj; 
    $.ajax({ 
     url: "XXX.soesite.XXX", 
     success: function(result) { 
      dataObj = ['Hi']; 
      console.log("Inside ajax"); 
      console.log(dataObj); 
     } 
    }); 
    console.log("Outside ajax"); 
    console.log(dataObj); 
} 
get_data_obj(); 

我期待的输出是

里面AJAX
[ '嗨']
外ajax
['Hi']

但是输出我越来越喜欢这个

外阿贾克斯
不确定
的内部结构是阿贾克斯
[“嗨”]

我真搞不清楚我的函数的控制流。基本上,我的功能首先应该是ajax,然后打印其他语句,但不幸的是我的功能没有按我期望的那样工作。任何人都可以告诉我在我的代码中出现了什么问题,我该如何让我的函数先完成Ajax工作然后再继续下去?

+2

AJAX是异步的,它会当它得到响应打印。想象一下,它就像一个函数调用,每当它完成时它将返回一个值,但它不会中断流调用它的原始函数。此外,尝试'async:false' - 这应该做你想做的。请记住,这更多的是“知道某事,但不使用它”。 –

+0

感谢@MageshKumaar的帮助。有效。 –

回答

1

$.ajax是异步的,如果您没有另外指定,则为默认值。

,如果你想操作给$.ajax请求之后发生,那么你应该将其包含在done()/success()/fail()功能或设置asyncfalse

function get_data_obj() { 
    var dataObj; 

    $.ajax({ url: "XXX.soesite.XXX", async: false, success: function(result) { 
     dataObj = ['Hi']; 
     console.log("Inside ajax"); 
     console.log(dataObj); 
    }}); 

    console.log("Outside ajax"); 
    console.log(dataObj); 
} 

get_data_obj(); 
+1

非常感谢。这工作。 –

+0

@ChiyaanSuraj请注意,同步呼叫折旧,并不建议您使用上述解决方案。 –

+0

@MageshKumaar - 这就是为什么我的第一个建议是在ajax调用的'done()'状态调用下一部分代码 – Ted

0

请记住以下电话时AJAX

异步:假(默认值)=代码暂停。 (其他代码正在等待此..)

Async:True =代码并行运行。没有什么可以暂停

因此,jquery不会等待先完成请求。

可以使用)由$阿贾克斯(提供的回调挂钩