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条)

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮