【问题标题】:AJAX Post Showing An Error when Try to Upgrade jQuery Version尝试升级 jQuery 版本时显示错误的 AJAX 帖子
【发布时间】:2016-11-22 05:47:35
【问题描述】:

我有很多具有不同名称和值的无线电元素。当我点击收音机时,它会使用 AJAX 方法发送到服务器。

AJAX 方法:

$("input[type=radio]").click(function() {
    $.ajax({
        url: "http://localhost/myproject/ajax_url",
        type: "POST",
        data: $("#my-form").serialize(),
        dataType: JSON,
        success: function(){}
    });
});

以前我使用的是 jQuery 版本 2.2.4 并且工作正常,但是当我尝试使用 jQuery 版本 3.1.1 进行更改时,它显示错误:

Uncaught TypeError: (o.dataType || "*").toLowerCase 不是函数

我确定我在服务器上输入的内容没有错(因为我从不更改我的服务器代码),当我尝试升级我的 jQuery 版本时才显示错误。您的解决方案可能对我有很大帮助:)

【问题讨论】:

  • dataType: JSON 应该用引号括起来。
  • dataType: "JSON"

标签: javascript jquery ajax


【解决方案1】:

问题在于JSON MDN

JSON 对象包含用于解析 JavaScript 对象表示法 (JSON) 并将值转换为 JSON 的方法。它不能被调用或构造,除了它的两个方法属性之外,它没有任何有趣的功能。

jQuery 2.x.x

它修剪dataType,然后返回字符串类型[Object JSON],这很好——字符串。 jQuery.trim 拯救了这一天。

// Extract dataTypes list
s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().match(rnotwhite) || [""];
// ------------------^^^^

jQuery 3.x.x

他们删除了$.trim,并且由于您传递了定义的JSON(否则,OR 运算符|| 将传递字符串*

// Extract dataTypes list
s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""];

修复

用引号将JSON 括起来,这样您就可以使用字符串而不是对象。 dataType 接受字符串。

$.ajax({
        url: "http://localhost/myproject/ajax_url",
        type: "POST",
        data: $("#my-form").serialize(),
        dataType: 'json', // lowercase is always preferered though jQuery does it, too.
        success: function(){}
});

【讨论】:

  • 我没有阅读关于这个的变更日志,所以我真的不知道。但是感谢您的回答:) 我错过了引号。
【解决方案2】:

希望您能得到答案here。参数 dataType 中存在语法错误。该值应带有双引号。希望它能为您提供解决方案。

【讨论】:

    猜你喜欢
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2022-01-24
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多