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

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条回答 默认 最新

  • 已采纳

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

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

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

    打赏 评论
  • 星空下的嗳 2016-10-14 00:42

    楼主问题解决了吗?我看代码改成同步也有问题啊

    打赏 评论
  • baidu_33735515 2017-03-13 07:02

    用直接写入reponse,
    PrintWriter out = resp.getWriter();
    out.print(result.getCid());
    out.flush();
    out.close(); 就可以解决了

    打赏 评论

相关推荐 更多相似问题