jQuery $ .ajax完成回调未触发

 土人甜层_233 发布于 2023-02-10 12:31

我有以下代码:

$("#loginSubmitButton").on("click",function(){
  var loginUserDetails = {
    email: $("#email").val(),
    password: $("#password").val()
  };

  //Send the AJAX request to authenticate the user
  $.ajax({
    type: "POST",
    url: "/somewebservice/v1/users/authenticate",
    data: JSON.stringify(loginUserDetails),
    contentType: "application/json;charset=UTF-8",
    dataType: "json",
  }).done(function() {
      $("#loginResult").text("Login successful");
    })
    .fail(function() {
      $("#loginResult").text("Login failed");
    });

});

根据jquery文档(除非我理解错误)我希望如果从我的Web服务器收到200 OK,则会触发完成.但是,在chrome控制台中我可以看到200 OK响应,但jquery似乎触发了失败处理程序.

有谁知道我在这里做错了什么?

3 个回答
  • 如果你的服务器为json响应返回空字符串(即使有200 OK),jQuery会将其视为失败.从v1.9开始,空字符串被认为是无效的json.

    无论原因是什么,一个好看的地方是传递给回调的'data'参数:

    $.ajax( .. ).always(function(data) {
        console.log(JSON.stringify(data));
    });
    

    它的内容将让你了解什么是错的.

    2023-02-10 12:34 回答
  • 您需要删除:

    dataType: "json"

    2023-02-10 12:34 回答
  • 有很多建议要删除

    dataType: "json"
    

    虽然我认为这是有效的,但它可能忽略了潜在的问题.这很可能是由解析器错误(浏览器解析json响应)引起的.首先检查.always()或.fail()中的XHR参数.

    假设它是一个解析器失败然后为什么?也许返回字符串不是JSON.或者在响应开始时它可能是错误的空格.考虑在小提琴手中看一下.我看起来像这样:

    Connection: Keep-Alive
    Content-Type: application/json; charset=utf-8
    
    {"type":"scan","data":{"image":".\/output\/ou...
    

    在我的情况下,这是PHP喷出不需要的字符(在这种情况下是UTF文件BOM)的问题.一旦我删除了这些,它修复了问题,同时保持

    dataType: json
    

    2023-02-10 12:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有