Javascript Synchronization with JSON Requests

Javascript Synchronization with JSON Requests

本文关键字:Requests JSON with Synchronization Javascript      更新时间:2023-09-26

如何确保一段代码在执行另一段代码之前已经完全执行?我正在向服务器发送一些 ajax 请求,然后使用返回的数据生成网页的其余部分。问题是,我需要在网页中拥有所有这些数据才能继续其余代码,因为该代码将影响已生成的内容,并且该代码在 JSON 请求之前运行并且所有这些都已完成......有什么方法可以确保这种情况不会发生吗?我设法通过执行请求然后要求用户按下按钮来解决它,但这是一种完全没有意义的方法。

有什么想法吗?

下面是一些代码: 问题是第二行在第一行之前执行(有很多类似的 JSON 函数调用)。

$.getJSON(url, function(data){ $("#mycontent").append("..... stuff here...... create loads of dibs with class set to mydivclass"); });
...
$("div.mydivclass").hide();

不幸的是,我无法使用 ajax 同步属性,因为:"数据类型:"jsonp"请求不支持同步操作"

如果您使用的是 jQuery 1.5+,则可以使用延迟来解决您的问题:

function first_ajax_request() {
    return jQuery.ajax(
         // Your settings here
         success: success_function_1
    );
}
function second_ajax_request() {
    return jQuery.ajax(
         // Your settings here
         success: success_function_2
    );
}
function final_sucess_callback() {
    // Do all your display work.
}
jQuery.when(first_ajax_request(), 
            second_ajax_request()).then(final_success_callback);

一篇关于这个主题的优秀文章,你也应该阅读埃里克·海恩兹(Eric Hynds)的文章。 他举了一些例子,说明你试图解决的问题类型。

jQuery请求默认是异步的,所以你的代码不会等待响应,所以你无法保证请求后的代码会在响应后执行,

所以你可以通过设置异步属性false来设置请求同步,现在请求是同步的,你可以保证其余的代码会在服务器响应后执行,喜欢这个。

$.ajax({
   url: "page.php",
   processData: false,
   data: xmlDocument,,
   async:false,
   success: handleResponse
 });