0

我有两个功能的问题。我只想chcekResultscallAPI完成后运行。

我的点击事件:

$("a#showA").click(function (e) {
    e.preventDefault();
    chceckResults(callAPI(apiKey));
});

和功能:

var Count = 0;
var ContractsArray = new Array();


function callAPI(yourAPIKey){
var enquiry = URL + yourAPIKey;
//alert(enquiry);
$.ajax({
 url: enquiry,
 type: 'GET',
 dataType: "jsonp",
 jsonp: "callback",
 jsonpCallback: "jsonpCallback2",
 complete: function (response, responseCode) {
 },
 success: function (json) {
     $.each(json.Contracts, function (index, contract) {
        // alert("Count before increament : " + Count);
        // alert(contract.ContractCode);
         ContractsArray[Count] = contract.ContractCode;

        // alert("Count after increament : " + Count);
        // alert("ContractsArray[Count]: " + ContractsArray[Count]);
         Count++;

        });
    }
 });
}

function chceckResults(){
alert("Count value in chceckResults : " + Count);
  for(var i = 0; i <= Count; i++){
    alert("ContractsArray[" + i + "]: " + ContractsArray[i]);
  }
}

我只想chcekResultscallAPI完成后运行。我怎样才能做到这一点?

4

3 回答 3

2

只需chceckResultscallAPI的成功处理程序中调用该函数:

success: function (json) {

    chceckResults();

    $.each(json.Contracts, function (index, contract) {
        ContractsArray[Count] = contract.ContractCode;
        Count++;
    });
}
于 2012-07-31T14:48:21.380 回答
2

您希望 chcekResults 在 callAPI 完成后运行,有几种可能性,它在 callAPI 成功后运行(我想这是您真正想要的),或者 callAPI 失败,或两者兼而有之。

由于 callAPI 正在进行 ajax 调用,因此您可以将 chcekResults 放在 ajax 的成功回调中。

这样:

$.ajax({
  url: enquiry,
  type: 'GET',
  dataType: "jsonp",
  jsonp: "callback",
  jsonpCallback: "jsonpCallback2",
  complete: function (response, responseCode) {
  },
  success: function (json) {
  $.each(json.Contracts, function (index, contract) {
    // alert("Count before increament : " + Count);
    // alert(contract.ContractCode);
    ContractsArray[Count] = contract.ContractCode;

    // alert("Count after increament : " + Count);
    // alert("ContractsArray[Count]: " + ContractsArray[Count]);
    Count++;
   });
   // --------------------- Edit Begins -------------------------
   chcekResults(...);   // This is run after ajax response returns.
   // --------------------- Edit Ends -------------------------
  }
});

这是一个快速的方法,如果你想让它更通用,你可以将 chcekResults 作为回调传递给 ajax,这样如果定义了这个回调,就运行它,如果没有,忽略。这样,您可以在有或没有回调的情况下使用这个 ajax。

于 2012-07-31T14:57:04.010 回答
1

打电话给checkResult你的callAPI success回调。 Success函数返回后调用。

于 2012-07-31T14:48:56.637 回答