0

私のdocument.ready:

$(document).ready(function () {

     var apiKey = "58e278fc-9d57-49bb-be96-9e85b847d5b5";

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

JSON API を呼び出してコントラクト名を取得します (そのうちの 2 つ)

function getHotelInfo(yourAPIKey) {
var enquiry = "http://api.roomex.com/api/hotel?apiKey=" + 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) {
         getAvailability(yourAPIKey, contract.ContractCode, startDate, endDate);
         getRates(yourAPIKey, contract.ContractCode, startDate, endDate);
         //alert(contract.ContractCode + " - done ");
       });
     }
 });
 }

getAvailability と getRates の両方の関数を 2 回実行する必要があります。少し遅れて動作します(そのアラートを入れた場合)そのアラートを削除すると問題が発生します。

これらの2つの関数と3番目の関数は次のとおりです-結果を入力する/

function populateValues(Type, Contractname, RoomType, Date, val) {
$("input#" + Type + "_IE-ORK-IN-32966275_" + Contractname + "_" + RoomType + "_" + Date).val(val);
// alert("input#" + Type + "_" + Contractname + "_" + RoomType + "_" + Date + " -> " + val);
}

function getRates(yourAPIKey, contractCode, startDate, endDate) {
 var ratesEnquiry = "http://api.roomex.com/api/rate?apiKey=" + yourAPIKey + "&contractCode=" + contractCode + "&startDate=" + startDate + "&endDate=" + endDate;

 $.ajax({   
     url: ratesEnquiry,
     type: 'GET',
     dataType: "jsonp",
     jsonp: "callback",
     jsonpCallback: "jsonpCallback3",
     complete: function (response, responseCode) {
         //console.log(response); console.log(responseCode);
         //alert("complete");           
     },
     success: function (json) {
         $.each(json, function (index, value) {
             populateValues("rate", this.ContractCode, this.RoomTypeCode, this.Date.substr(0, 10), this.RoomPrice);
             populateValues("hrate", this.ContractCode, this.RoomTypeCode, this.Date.substr(0, 10), this.RoomPrice);                 
         });
     }, 
 });
}



function getAvailability(yourAPIKey, contractCode, startDate, endDate) {
var availabilityEnquiry = "http://api.roomex.com/api/availability?apiKey=" + yourAPIKey + "&contractCode=" + contractCode + "&startDate=" + startDate + "&endDate=" + endDate;
$.ajax({
    url: availabilityEnquiry,
    type: 'GET',
    dataType: "jsonp",
    jsonp: "callback",
    jsonpCallback: "jsonpCallback",
    complete: function (json, responseCode) {
        //console.log(response); console.log(responseCode);
        //alert("complete");           
    },
    success: function (json) {
        $.each(json, function (index, value) {
            //populateAvailability(this.Date.substr(0, 10), this.RoomTypeCode, this.ContractCode, this.Quantity);
            populateValues("avail", this.ContractCode, this.RoomTypeCode, this.Date.substr(0, 10), this.Quantity);
            populateValues("havail", this.ContractCode, this.RoomTypeCode, this.Date.substr(0, 10), this.Quantity);              
        });
    }, async: false
});
}

var startDate = "2012-07-24";
var endDate = "2012-07-31";

od 非同期が原因で問題が発生します。しかし、どうすればそれを修正できるかわかりません。皆さん、私を助けてくれませんか?

4

1 に答える 1

1

最初の非同期リクエストが完了したら待機し、次に実行して結果を表示します。

例えば:

async_func1(async_func2(function(result){
//show results
}));

async_func1 の最初のパラメータは、リクエストが完了したときのコールバックです。

于 2012-07-27T13:33:57.147 に答える