jquery的 $.ajax({ ....}) 会影响程序的执行顺序??
aspx中:
function f1() {
$.ajax({
url: "xxx.ashx?action=....",
type: "post",
error: function () { alert('数据加载失败!'); },
success: function (rs) {
if (rs == "y") {
window.xxx= true;
}
else {
window.xxx= false;
}
}
});
alert(window.isHasClass);
}
ashx中:
response.Write("....");
response.End();
为什么执行的顺序是:
→ $.ajax({
→alert(window.isHasClass);
→response.Write("....");
→response.End();
→success: function (rs) {
→ if (rs == "y") {
。。。。
为什么 alert(window.isHasClass) 会比seccess:... 更优先执行?没按顺序来啊??
------解决方案--------------------因为JQuery中的Ajax是异步执行的
------解决方案--------------------ajax是异步提交处理,提交后需要响应返回结果..
你就当做再开一个线程执行代码
alert是正常的代码执行
所以会比ajax快点
所以你代码处理要在ajax success中处理 放外面处理调不到success的结果的
------解决方案--------------------ajax是异步执行,就好比一个人排队买票,前面还有老长老长的队伍,然后他找了一个人帮他排队,他自己去嘘嘘,然后回来了队伍的时候该他买票了。就这样理解一下。
------解决方案--------------------Ajax有两种执行方式
Jquery里面好像是没特别说明一般都是异步的。也就是说不按套路走。
手写Ajax的JS部分就很容易明白了
创建好xmlhttprequest对象之后,有个open的方法,3个参数
第一个参数是明确传递的方式,是POST还是GET
第二个参数就是你上面说的ASHX的URL
第三个参数是指明异步还是同步,true就是异步,false就是同步。
详细:http://blog.csdn.net/thinkpadleo/article/details/586267
------解决方案--------------------
async: false, //是否异步 默认为 true
error: function() { alert('数据加载失败!'); window.location = "ErrorPage.htm"; },
------解决方案--------------------$.ajax 默认是异步执行了 程序执行到ajax时不会被阻塞,而会直接执行下去
不过可以像LS所说的把ajax设为同步执行 async: false