提交jQuery.ajax数据时,字符串包含“?”&引用;它将值更改为“0”;jQuery19107363727174233645“U 1373301489648”;
页面侧javascript:提交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,
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的官方问题:这里: