提交jQuery.ajax数据时,字符串包含“?”&引用;它将值更改为“0”;jQuery19107363727174233645“U 1373301489648”;

提交jQuery.ajax数据时,字符串包含“?”&引用;它将值更改为“0”;jQuery19107363727174233645“U 1373301489648”;,jquery,ajax,json,Jquery,Ajax,Json,页面侧javascript: var model = {"NumberOfCPUs":"2","NumberOfCores":"4","OSType":"Linux","OSVersion":"???"}; var id = 0; var success = false; //send to server: $.ajax( { async: false,

页面侧javascript:

var model = {"NumberOfCPUs":"2","NumberOfCores":"4","OSType":"Linux","OSVersion":"???"};

        var id = 0;
        var success = false;
        //send to server:
        $.ajax(
            {
                async: false,
                data: JSON.stringify(model),
                dataType: "json",
                type: "post",
                url: serverSideURL

            });
实际发送到服务器的请求内容:

{"NumberOfCPUs":"2","NumberOfCores":"4","OSType":"Linux","OSVersion":"jQuery19107363727174233645_1373301489648?"}
发生了什么事?字符串“?”是某种特殊的控制字还是jQuery中的某种东西

谢谢

???用作jsonp数据中的回调名称占位符 请求。因此,找到它后,jQuery将把您的请求“提升”为jsonp

jquery bug跟踪器

使用此属性

contentType: "application/json; charset=utf-8"
这是一个:

发布AJAX时,数据的格式为“?” jQuery

它被标记为已修复,即使在关于bug的评论中,它显然从未被修复过。这个问题应该重新讨论

解决办法显然包括将JSON行更改为以下内容:

var model = {NumberOfCPUs:"2",NumberOfCores:"4",OSType:"Linux",OSVersion:"???"};

并允许它被序列化。这样,它就不会触发导致双问号被替换的正则表达式。

如果我仔细阅读了其他答案中的错误注释,真正的问题在于,在将json字符串传递给
数据之前,先将其字符串化<代码>数据
需要包含查询的
字符串
(例如
“a=asdf&b=qwer”
或包含将转换为查询的键和值的
对象)。而是传递类似于
'{“a”:“asdf”,“b”:“qwer”}'
,一个
字符串
,包含一个非查询的字符串化数组。它以某种方式成功地转换了服务器能够理解的数据,但显然也触发了该错误/功能

解决方案1

如果要通过
$\u POST['a']
访问数据,以获取JSON对象中的键
“a”

$.ajax( {
    async: false,
    data: model, //Pass the Array itself to the function
    dataType: "json",
    type: "post",
    url: serverSideURL
});
()

解决方案2

如果要检索JSON字符串:

$.ajax( {
    async: false,
    data: {
      "MyLilString": JSON.stringify( model )
    }
    dataType: "json",
    type: "post",
    url: serverSideURL
});
在本例中,
$\u POST[“MyLilString”]
包含序列化的JSON,您可以在上使用
JSON\u decode()

()

另一个建议

我从评论中提取的另一个建议(但我现在找不到--')是将
jsonp
设置为
false

$.ajax( {
    async: false,
    data: model
    dataType: "json",
    type: "post",
    url: serverSideURL,
    jsonp: false
});

这应该会阻止jQuery将回调函数插入请求体。

processData:false
很可能会解决这个问题。只是好奇一下:您使用的是什么版本的jQuery?为什么提交???无论如何为什么不使用null或single?感谢您的解释,这里提到了jquery的官方问题:这里: