在Fancy Box覆盖按钮单击时调用时,Ajax无法按预期工作

时间:2012-07-17 14:00:34

标签: javascript ajax fancybox

关于Ajax和我,我有一个愚蠢的问题 花哨的盒子。我是阿贾克斯的新手。 我在我的一个页面中使用了精美的盒子,作为精美的盒子 单击一个按钮就会弹出一个表单 一些输入字段和按钮。 单击该按钮,尝试进行ajax调用 需要在通话之前显示指示符 complete.I进行了同步通话但指标 没有出现,但我把它变成异步的那一刻 称它正确显示。 任何人都可以解释原因

更新:看看下面的代码....它工作正常并显示指示器,直到我们从服务器得到响应...但是当点击花式框覆盖上的按钮调用该功能时'使用async false     isAsync是假的

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]);
       }
   }
}

}

1 个答案:

答案 0 :(得分:1)

同步调用会阻止浏览器执行任何操作,直到调用完成,而异步调用允许在等待从服务器返回结果时执行其他操作(如指示符显示)。因此,当您进行同步呼叫时,浏览器将不会显示您的指示符,或执行任何其他操作,直到它从您的服务器获得响应为止。

简而言之,您应该很少需要对服务器进行同步调用。 AJAX中的“A”代表“异步”,原因是:)。