jQuery 在提交的数据中附加一些奇怪的字符串

2024-05-09

重现该bug的代码(在html页面中放入以下代码并读取Fiddler中提交的数据。jQuery 1.4.2工作正常,问题发生在1.5.1和1.5.2):

<html>
<head>
<script src="https://github.com/douglascrockford/JSON-js/raw/master/json2.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script>
var data = { "Name": "test??", "testDesc": "testdesc??"};
  $.ajax({ 
    url: "submit.aspx/SubmitData", 
    data: JSON.stringify(data),
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    cache: false
  }).success(function (msg) {});
</script>
</head>
<body></body>
</html>

我使用 jQuery 1.5.1 进行数据处理并将数据提交到服务器

function test(name, testDesc){
  var data = { "Name": name, "testDesc": testDesc};
  $.ajax({ 
    url: "submit.aspx/SubmitData", 
    data: JSON.stringify(data),
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    cache: false
  }).success(function (msg) {//......});
}

在一千条记录中,数据中有几条记录带有“jQuery151023383707909744822_1301931324827”和“jQuery151033911434971578497_1301989384660”字符串。

这是 jQuery 的 bug 还是任何插件导致的问题?

更多信息: 这个奇怪的字符串似乎取代了原来的“?”在那些记录中。 例如, 你喜欢StackOverflowjQuery151023383707909744822_1301931324827 我非常喜欢它。 这个好么jQuery151023383707909744822_1301931324827 太棒了。

针对该错误的更新: 我已经重现了该错误的案例。如果我输入“测试?”对于名称,提交的数据变为 "{"Name":"testjQuery15103933552800185728_1302170988810","Description":"fdsa"}"


Update:

Looks like a bug in jQuery to me It is a bug in jQuery, specifically bug #8417 http://bugs.jquery.com/ticket/8417, which was reported about five weeks ago, closed erroneously, then reopened and there's now a pull request with a fix pending; hopefully the fix will make a future version.

解决方法如下,但首先:此代码单独复制它:

jQuery(function($) {

  $('#theButton').click(function go() {
    var data = { "Name": "test??", "testDesc": "description"};
    $.ajax({ 
      url: "/icece5", 
      data: JSON.stringify(data),
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      cache: false
    });
  });
});

实时复制 http://jsbin.com/icece5/4

虽然我们在 jsbin.com 上看不到 POST 的结果,但我们不在乎,因为这就是我们要做的sending到我们担心的服务器。如果我发送该请求并在 Chrome 的开发工具中查看该请求,我会清楚地看到数据被下面描述的 JSON-P 回调名称损坏。

有趣的是,如果我们不告诉 jQuery 我们期待从服务器返回 JSON(请注意注释掉的行),则不会发生这种情况:

jQuery(function($) {

  $('#theButton').click(function go() {
    var data = { "Name": "test??", "testDesc": "description"};
    $.ajax({ 
      url: "/icece5", 
      data: JSON.stringify(data),
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      //dataType: "json", 
      cache: false
    });
  });
});

实时复制 http://jsbin.com/icece5/5

我没有想到,返回的数据类型不应该影响它对我们发送的数据的处理。但它确实需要一个解决方法:

解决方法

var data = { "Name": "test??", "testDesc": "testdesc??"};
$.ajax({ 
    url: "submit.aspx/SubmitData", 
    data: JSON.stringify(data),
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    dataType: "text",              // <== Tell jQuery you expect plain text
    cache: false
}).success(function (data) {
    data = jQuery.parseJSON(data); // <=== Then parse it yourself
});

Recommend putting together a test case on jsFiddle.net and reporting it http://bugs.jquery.com/newticket to the jQuery team, since you're the person with the real-life problem with it. If it's really a bug, they'll fix it; if not, I'd be interested to know why not...


原答案:

您引用的代码正在执行POSTJSON 编码数据,但是您提到的字符串(jQuery151023383707909744822_1301931324827等)是 jQuery“expando”(通过获取 jQuery 版本并向其添加随机值在运行时确定)加上_加上纪元值。 jQuery 以该形式创建字符串作为 JSON-P 回调函数的默认名称,如下所示:

jQuery-1.5.1.js 的第 1,326-1,329 行:

// Unique for each copy of jQuery on the page
// Non-digits removed to match rinlinejQuery
expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),

以及(第 7,029-7,035 行):

// Default jsonp settings
jQuery.ajaxSetup({
    jsonp: "callback",
    jsonpCallback: function() {
        return jQuery.expando + "_" + ( jsc++ );
    }
});

所以我的猜测是,您引用的代码不是生成这些值的代码,而是您有其他代码使用它们。

JSON-P 回调的名称将替换?如果您使用 JSON-P 进行请求,则在请求的 URL 中。我没想到它会在你的data.

我会审查你的使用情况ajaxSettings等等。如果您切换到未缩小的版本进行调试,您还可以在您使用的任何调试器中设置断点(你用了一个,对吧?没有理由不这样做 http://blog.niftysnippets.org/2011/03/no-excuse.html)在第 7,033 行(正在创建这些字符串的地方),然后找出代码的哪一部分触发了它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 在提交的数据中附加一些奇怪的字符串 的相关文章

随机推荐

  • 错误左值需要作为赋值C++的左操作数

    整个程序基本上只允许用户移动光标 如果用户位于给定的坐标范围 2 2 内 则允许用户键入输入 我刚刚提供了一些我认为足以解决问题的代码 我不知道是什么导致了这个问题 你能解释一下为什么会发生吗 void goToXY int int 创建一
  • 如何从计划任务中删除触发器

    我使用 PowerShell 中的任务计划程序 cmdlet 为 Perfmon 数据收集器集的计划任务配置触发器 我使用以下命令来修改计划任务并在服务器启动时启动数据收集器集 trigger New ScheduledTaskTrigge
  • MYSQL数据库删除行后需要进行后期优化

    我有一个当前为 10GB 的日志表 它有很多过去两年的数据 我真的觉得目前我不需要那么多 我是否错误地认为在表中保存多年的数据不好 表越小越好 我的桌子都有 MYISAM 引擎 我想删除 2014 年和 2015 年的所有数据 很快我就会删
  • 正确使用“extern”关键字

    有一些来源 书籍 在线材料 解释了extern如下 extern int i declaration has extern int i 1 definition specified by the absence of extern 并且有支
  • 奇怪的 ASP.NET 错误!

    我正在运行带有 IIS 7 5 的 Windows 7 x64 版本 我有一个简单的 asp net 网站 我在其他版本的 Windows 和 IIS 上运行该网站 但现在在某些页面上出现以下错误 异常信息 异常类型 HttpParseEx
  • 为什么jdk中没有ConcurrentLinkedHashMap类?

    这个问题直接接着问从我之前的问题来看 https stackoverflow com q 12299731 1527084 我想我的第二个问题的答案是否定的 所以我想了解为什么 java util concurrent 包中没有 Concu
  • 有没有任何工具可以将 PVR 纹理分割成一组图块?

    我有一张大的 png 纹理 4096x4096 我需要将其部分加载到内存中 我已经将大 png 纹理分割成 16 个 1024x1024 块 然后将它们转换为 PVR 压缩文件 问题是 当我绘制这些图块时 图块之间的边缘与 png 的边缘不
  • 使用 Flask-SQLAlchemy 进行多对多多数据库连接

    我正在尝试使这个多对多联接与 Flask SQLAlchemy 和两个 MySQL 数据库一起工作 并且它非常接近 只是它为联接表使用了错误的数据库 这是基础知识 我有main db and vendor db 表格设置为main db u
  • Flutter 分析/构建在 GitHub 操作中失败

    当运行以下操作时 它会失败flutter analyze 如果我删除它 稍后会失败flutter build 这两个命令在本地都可以正常工作 我理解该消息 但无法理解包路径可能有什么问题 GitHub 操作错误 flutter analyz
  • 如何在Webview中保存用户名和密码

    目前 我还在学习Android开发的过程中 所以如果我的这个问题对你来说不太容易理解 请原谅 我创建了一个 Android 应用程序 它使用 RecyclerView 显示一组列表 当用户单击列表中的每个名称时 它会将它们重定向到一组不同的
  • 我们可以使用 EWS 托管 API 连接到 Exchange 2016 吗?

    我使用的是 EWS 托管 API 2 2 它的枚举中没有显示 Exchange 版本 2016 我可以看到 Exchange 2013 之前的版本 那么如何连接到 Exchange Server 2016 该 API 是否尚未从 Micro
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • 将enable_nestloop设置为OFF有哪些陷阱

    当我的表中有大量行时 我的应用程序中有一个查询运行得非常快 但是 当行数适中 既不大也不小 时 相同的查询运行速度会慢 15 倍 解释计划显示对中等规模数据集的查询正在使用嵌套循环其连接算法 大数据集使用散列连接 我可以阻止查询规划器在数据
  • MySQL 连接逗号分隔字段

    我有两张桌子 第一个表是batch在字段 batch 中包含逗号分隔的学生 ID 的表 batch id batch 1 1 2 2 3 4 第二个表是分数 marks id studentid subject marks 1 1 Engl
  • 注解和装饰器有什么区别?

    我很困惑何时使用术语注释以及何时使用装饰器 Component selector tabs template export class Tabs 装饰器对应于在类上调用的函数 而注释是使用 Reflect Metadata 库在类上设置的
  • 如何在 flutter 中用动画 POP

    我正在触发 Navigator pop 事件 并且想要淡出到页面的过渡 我尝试过 Fluro 但没有尝试过 我对实施它不感兴趣 这就是我正在做的 Widget build BuildContext context return Scaffo
  • “if”在 ASP.NET MVC View (.aspx) 文件中被认为有害?

    我记得看到一个博客 或其他内容 说你不应该在 ASP NET MVC 的 aspx 文件中使用 但我不记得它说的替代方案是什么 有人记得看过这个并指出我吗 基本上 这意味着您的视图中不应该有大量的 if 语句 您的控制器和视图模型应该能够处
  • 对数据框的行进行排序

    我有以下数据框 adjusted RFC df Node Feature Indicator Scaled Class Direction True False 0 0 km lt 0 181 class 4 0 gt 1 NA 125 1
  • 导入 CSS 文件时出现“找不到所需模块”的流程

    当我尝试通过 webpack import index css 导入 CSS 时 出现此错误 3 import index css index css Required module not found 我有一个类似 ComponentNa
  • jQuery 在提交的数据中附加一些奇怪的字符串

    重现该bug的代码 在html页面中放入以下代码并读取Fiddler中提交的数据 jQuery 1 4 2工作正常 问题发生在1 5 1和1 5 2