Wenchel 2016-10-13 09:39 采纳率: 33.3%
浏览 10723
已采纳

ajax向后台请求数据并成功返回,但不执行success也不执行error

服务器端返回字符串类型的数据正常。前端代码如下:

 $('#doc-vld-msg').validator({
         submit: function () {
             var formValidity = this.isFormValid(); 
             if (formValidity) {
                 var progress = $.AMUI.progress;
                 $.ajax({
                     type: "POST",
                     url: "save.ashx",
                     cache: "false",
                     dataType: "text",
                     data: {
                         BicycleID: $("#doc-vld-name-2-1").val(),
                         University: $("#doc-select-1-1").val(),
                         Password: $("#doc-vld-age-2-1").val(),
                     },
                     beforeSend: function () {
                         progress.start();
                     },
                     success: function (result) {
                         alert(result);
                         window.location.href = "index.html";
                     },
                     error: function (jqXHR) {
                         alert("发生错误:" + jqXHR.status);
                     },
                     complete: function () {
                         progress.done();
                     }
                 });
             }
             else { alert("未完成验证!"); }   
         }
     });

先是做一个前台控件的验证,验证通过就发送ajax请求,我在浏览器和后台都看过是OK 200,但就是不执行success,也不执行error,我试了好多办法,发现,在if最后加一个alert()就可以执行success或者error了,代码如下:

 $('#doc-vld-msg').validator({
         submit: function () {
             var formValidity = this.isFormValid(); 
             if (formValidity) {
                 var progress = $.AMUI.progress;
                 $.ajax({
                     type: "POST",
                     url: "save.ashx",
                     cache: "false",
                     dataType: "text",
                     data: {
                         BicycleID: $("#doc-vld-name-2-1").val(),
                         University: $("#doc-select-1-1").val(),
                         Password: $("#doc-vld-age-2-1").val(),
                         Random: getRandom(1000)
                     },
                     beforeSend: function () {
                         progress.start();
                     },
                     success: function (result) {
                         alert(result);
                         window.location.href = "index.html";
                     },
                     error: function (jqXHR) {
                         alert("发生错误:" + jqXHR.status);
                     },
                     complete: function () {
                         progress.done();
                     }
                 });
                 alert("数据已提交,正在查询是否能成功...");//就是添加的这一句
             }
             else { alert("未完成验证!"); }   
         }
     });

但是问题来了,他是先执行alert("数据已提交,正在查询是否能成功...");再执行success或者error,这是为什么?然后还有为什么我不添加这一句就不执行呢?
大神们,这是什么原因?我是个菜鸟,望大神解答一下。

  • 写回答

3条回答 默认 最新

  • Go 旅城通票 2016-10-13 09:51
    关注

    因为ajax异步的,肯定是执行往下执行了,ajax回调都是ajax请求返回后才执行的,所以肯定是晚于alert("数据已提交,正在查询是否能成功...");这句执行

    你要先执行回调后再执行后续的代码需要配置为同步ajax

    $.ajax({async:false,
    //....

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题