我有一个名为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
}


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

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

我将竭力建议您不要将回调用于异步代码,而不要尝试在同步请求中使用错误。在使用javascript时,最好采用围绕异步请求进行编码的编码样式,这尤其好,尤其是在您已经在做AJAX的情况下(根据定义,它是异步的)。

08-15 14:25