ajax异步问题

 aspx页面:  <tr>
                        <td align="right" nowrap>
                            高拍仪品牌:
                        </td>
                        <td>
                           <asp:DropDownList runat="server" ID="ddl_GpyBrand">
                               
                           </asp:DropDownList>
                             <asp:DropDownList runat="server" ID="ddl_GpyVersion">
                               
                           </asp:DropDownList>
                        </td>

                    </tr>


绑定二级下拉框

function BindGpy() {
    var gpybrand = "";
    gpybrand = $("#ddl_GpyBrand").val();
    $("#ddl_GpyVersion").empty();
    $("#ddl_GpyVersion").prepend("<option value=''>--请选择--</option>");


    var par = "action=getGPY&gpybrand=" + gpybrand;
    $.ajax({
        //async:false,
        type: "POST",
        url: handleurl,
        data: par,
        dataType: "json",
        error: function (xmlHttpRequest, textStatus, errorThrown) {
            $.tipMessage('错误', errorThrown, 'error');
        },
        success: function (returnJsonValue) {
            $.each(returnJsonValue, function (k, item) {
                $("#ddl_GpyVersion").append("<option value=" + item.SCODE + ">" + item.SVALUE + "</option>");
            });
        }
    });
}


给第二个下拉框赋值:

function Load_Info(data) {
    $("#uc_btnSelectOrganize1_txtOrganize").val(data.GORGANIZENAME);
    $("#uc_btnSelectOrganize1_hidOrganizeCode").val(data.GORGANIZEID);
    $("#uc_btnSelectOrganize1_hidOrganizeSelJb").val(data.iJB);
    BindGpy();
    //alert(data.GPYVERSION);
    $("#ddl_GpyVersion").val(data.GPYVERSION);
   
}



出现问题:第二个下拉框里面的内容始终没有被选中,但是如果在ajax里面加上一句 //alert(data.GPYVERSION); 第二个下拉框里面的内容却又能绑定 很是奇怪

解决方案:ajax加async:false,  就可以了 。。


查阅资料:

最近做东西用到ajax,我在火狐下firebug打断点一点问题都没有,可是关了firebug,程序不进后台方法,纳闷了好久,从来没有遇到过这种情况,最后加了一个参数async:false好了,还是
很纳闷,以前写了那么多ajax相关代码从来没遇到过这种情况,原来对asy:nc:false的含义不大了解,还有可能和现在这个平台有关系吧。
async boolean default: true
by default, all requests are sentasynchronous (e.g. this is set to true by default). if you need synchronousrequests, set this option to false. note that synchronous
requests may temporarily lock the browser,disabling any actions while the request is active.
async. 默认是true,即为异步方式,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的success方法,这时候执行的是两个线程。若要将其设置为false
,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
下面查看一个示例:
var temp;
$.ajax({
 async: false,
  type : "post",
  url : defaultpostdata.url,
  datatype : 'json',
  success : function(data) {
     temp=data;
  }
});
alert(temp);
这个ajax请求为同步请求,在没有返回值之前,alert(temp)是不会执行的。
如果async设置为:true,则不会等待ajax请求返回的结果,会直接执行ajax后面的语句。
不过上面设置同步请求的方法,有网友曾经反馈将async设成false后, 原意是想返回数据了再执行$.ajax后面的脚本, 没想到这个地方却导致了在火狐浏览器下出现闪屏(firefox 11.0),滚
动条下拉到底部触发ajax的情况。最后只能将async:false注释掉,也就是async为ture的情况下,成功解决了火狐浏览器滚动条下拉到底部触发ajax出现闪屏的问题。



总结:

async:false:表示同步加载数据
async:true:表示异步加载数据
同步的意思:
是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。
异步:
则这个AJAX代码运行中的时候其他代码一样可以运行。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值