处理ajax同步?

处理ajax同步?

问题描述:

我有一个例子通过ajax获取数据并做一些事情。条件是这个函数可以重用。可以随时打电话。处理ajax同步?

<script type="text/javascript"> 

    function getData(value1,value2){ 

     $.ajax({ 
      url: URL, 
      data:{ 
       email:value1, 
       age:value2 
      }, 
      async:false, 
      dataType: "json", 
      type: "get", 
      success: function(data){ 

       var result; 

       result = data.result; 

       console.log("result:"+result); 
      }, 
      error: function(){ 
      } 
     }); 
    }; 

    var data; 

    data = getData("email","age"); 

    console.log("data:"+data); 
</script> 

当我调用ajax时,结果返回后来数据empty.I尝试使用async false,但只是在AJAX内部确定。

如何做JavaScript等待响应,不再执行,得到响应,然后继续执行。设置超时不是个好主意,因为它会导致不同服务器和服务器上的服务器响应速度问题向不同客户端发出问题

+1

* Syncrhonous的XMLHttpRequest已被弃用的主线程的,因为其所带来的影响最终用户的体验* - 而不是远离异步代码,学会使用它。注意:在你的代码中,'getData'不返回任何东西,这就是为什么'data'没有定义的原因 –

+0

将'var result;'移动到'getData'的顶部...在'getData'的底部添加'return结果;' –

+0

如果您想要一个包含**异步**请求的答案 - 请参阅https://*.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call - 它看起来像你最初尝试异步请求和采取同步,因为你不能异步工作 –

可以使用回调在阿贾克斯

例如:

function getData(value1,value2, callback){ 

     $.ajax({ 
      url: URL, 
      data:{ 
       email:value1, 
       age:value2 
      }, 
      dataType: "json", 
      type: "get", 
      success: function(data){ 

       var result; 

       result = data.result; 
    callback(result) 
       console.log("result:"+result); 
      }, 
      error: function(){ 
      } 
     }); 
    }; 

    var data; 

    data = getData("email","age", function(result){ 
    console.log("data:"+data); 
}); 
+0

在这种情况下,为什么使用同步请求? –

+0

将async设置为false意味着您要调用的语句必须先完成才能调用函数中的下一个语句。如果设置async:true,那么该语句将开始执行,并且将调用下一个语句,而不管异步语句是否已完成。 –

+0

我明白asynch是如何工作的,只需要一个回调函数,你也可以走完整个异步路线。附: '数据'仍然**在你的代码中是未定义的 –

你可以试试这个:

function getData() { 
    $.ajax({ 
     url: URL, 
     ... 
     ... 
     type: 'GET', 
     success : resultData 
    }) 
} 

var resultData = function (data) { 
    console.log(data); 
    // This will be called whenever the data is available 
    // So you execute what ever you want to, once data is available 
    // initiate function that is dependent on that data .... 
} 

getData(); 

注意:千万不要用async: false,因为它将使所有未来 代码等待执行其从来就不是一个好主意,使AJAX异步: 假,请尝试回调函数方法。它会给你同样的结果 ,而不会使ajax async:false,并且它更好的方式来做到这一点。