javascript - 等待ajax回复

标签 javascript asp.net ajax

我有一个名为 GetRequest() 的 JavaScript 函数,它使用 $.ajax() 调用服务器并接收 json 字符串:

function GetRequest(ThePage) {

RequestedPage = parseInt(ThePageNumber,10);

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "../Pages/MyPage.aspx/GetPage",
    data: "{'ThePage':'" + ThePageNumber + "'}",
    dataType: "json",
    success: function (msg) {
        var data = msg.hasOwnProperty("d") ? msg.d : msg;
        OnSucessCallBack(data);
    },
    error: function (xhr, status, error) {
        alert(xhr.statusText);
    }
});

};

我有一个名为 ShowData() 的函数,它调用 GetRequest(),并且必须等到 GetRequest 收到其数据才能继续。

function ShowData() {

//some code that determines the page number

GetRequest(ThePageNumber);

//wait until the data is in

};

我在多个地方使用了 GetRequest,因此无法在 ShowData 上下文中使用其成功函数。

如何让我的函数 ShowData 暂停执行,直到 GetRequest 完成?我想过更改 OnSuccessCallBack 函数并确定哪个函数最初调用 GetRequest() 但我不确定如何最好地做到这一点。

感谢您的建议。

最佳答案

向 GetRequest 添加函数传入,如下所示:

function GetRequest(pageNumber, successCallback){

  //I admit this isn't "elegant" but it's most assuredly readable
  var callback;
  if (successCallback == null) {
    callback = //default callback definition here
  } else {
    callback = successCallback;
  }

  //do everything else the same here 
  //except use the callback defined above
}

这使您可以灵活地为 onsuccess 添加单独的回调处理程序

或者,执行与上面相同的操作,但使用“onComplete”处理程序,除非您在返回时专门需要数据(它不会像您那样显示)。

我将极力建议您对异步代码使用回调,而不是尝试硬塞同步请求。在 JavaScript 中工作时,最好采用围绕异步请求的编码风格,尤其是在您已经在使用 AJAX 的情况下(根据定义,它是异步的)。

关于javascript - 等待ajax回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6591161/

相关文章:

Javascript 参数

javascript - 在浏览器中单击返回或使用 history.go(-1) 后删除特定字段

javascript - 当它应该输出 8.99 时从 Javascript 中的方程式获取 6.33

c# - 从 C# Codebehind 访问 App_Code 中的 VB 代码

asp.net - 与 ASP.NET 和 SQL Server 聊天

javascript - 如何根据包含滚动的调整大小更改 div 高度

ASP.NET 和 Web Tools 2012.2 引用 LESS 文件

c# - 使用 HttpClient 和 Web API 方法 [FromBody] 参数发布到 Web API 最终为空

php - 单击复选框时如何添加新内容?

javascript - node.js 相当于标准的 PHP ajax 保存方案