0

Ajax とファンシー ボックスについてばかげた質問があります。Ajax は初めてです。ファンシーボックスがボタンをクリックすると、いくつかの入力フィールドとボタンを持つフォームがポップアップするように、ページの1つでファンシーボックスを使用しています。ボタンをクリックすると、呼び出しが完了するまでインジケーターを表示する必要がある ajax 呼び出しを作成しようとしました。同期呼び出しを行いましたが、インジケーターは表示されませんでしたが、非同期呼び出しにした瞬間に正しく表示されました. 誰か理由を説明してくれませんか

更新: 以下のコードを見てください....正常に動作し、サーバーからの応答を取得するまでインジケーターを表示します...しかし、派手なボックスオーバーレイのボタンをクリックして呼び出されたときの関数は機能しませんasync false isAsync は False

function LoadCarrier(isAsync)
{
   try
  {
    SetCarrierLoadingIndicator("","Loading..");
    xmlHTTPObject1 = GetXMLHTTPObject();
    xmlHTTPObject1.onreadystatechange = OnPopulateCarrierComplete;
    var currentTime = new Date();
    var  parameters =   "";
    var pageNumber=document.getElementById(hdnCarrierCurrentPage).value;
    parameters += "CarrierPage";
    parameters += "^" + pageNumber;
    parameters += "~NetworkIds";
    parameters += "^" + GetAllSelectedNetworks();
    parameters += "~SelectedCarriers";
    parameters += "^" + GetAllSelectedCarriers();
    var parms = "?OPCode=LoadCarrier&Parms=" + parameters + "&RequestTime" + currentTime;
    var ajaxURL = ajaxCallHandlerUrl + parms;
    xmlHTTPObject1.open ("GET", ajaxURL, isAsync);
    xmlHTTPObject1.send(null);
}
catch(exception)
{
    alert(exception);
}
return false;

}

     function OnPopulateCarrierComplete()
    {
     if (xmlHTTPObject1.readyState == 4)
   {
   var result = xmlHTTPObject1.responseText;
   var contents = result.split("[6CE650P$0$NTS3E!]");

   if (contents[0] == "SUCCESS")
   {
        SetCarrierLoadingIndicator("none","");
        if(contents[1].length > 0)
        {
            var details=contents[1].split("[$sEpaRaToR$]");
            document.getElementById(lblCarrier).innerHTML=details[0];
            document.getElementById(lblCarrierPaging).innerHTML=details[1];
            document.getElementById(lblCarrierCount).innerHTML=details[2];
            var tmp=details[3].split(',');
            for(var i=0;i<tmp.length;i++)
            {   
                CarrierList.push(Number(tmp[i]));     
            }
        }
        else
        {
            document.getElementById(lblCarrier).innerHTML="";
            document.getElementById(lblCarrierPaging).innerHTML="";
            document.getElementById(lblCarrierCount).innerHTML="0";
        }
   }
   else
   {
       if(contents[1] == "Session Expired")
       {
            parent.document.location = "Default.aspx";
       }
       else
       {
            alert(contents[1]);
       }
   }
}

}

4

1 に答える 1

1

同期呼び出しは、呼び出しが完了するまでブラウザーをロックし、非同期呼び出しでは、サーバーから結果が返されるのを待っている間、他の操作 (インジケーターの表示など) を実行できます。そのため、同期呼び出しを行うと、サーバーから応答が返されるまで、ブラウザーはインジケーターを表示したり、他のことをしたりしません。

つまり、サーバーに対して同期呼び出しを行う必要はほとんどありません。AJAXの「A」は、理由により「非同期」を表します:)。

于 2012-07-17T14:11:12.767 に答える