JSON.stringify 奇怪的行为
JSON.stringify odd behavior
我正在整理一些值以发送回 ASP.NET MVC 控制器操作。我收到无效 JSON 原始异常,但我正在使用 JSON.stringify 并且感到困惑。
我建立了一个名为 searchValues
的搜索价值控股。将 console.log(JSON.stringify({ "values": searchValues }));
放入我的代码并打开 Chrome 的控制台输出以下内容
{"values":["name_last:foo"]}
我使用完全没有 console.log
用法的一些代码将 data
参数填充到 ajax 调用。然而,在 Fiddler 中观察调用,正在发送的请求看起来像这样
0=%7B&1=%22&2=v&3=a&4=l&5=u&6=e&7=s&8=%22&9=%3A&10=%5B&11=%22&12=n&13=a&14=m&15=e&16=_&17=l&18=a&19=s&20=t&21=%3A&22=f&23=o&24=o&25=%22&26=%5D&27=%7D
我在 Kendo 网格中使用它,但指定它作为 post 发送:
$("#search-preview").kendoGrid({
columns: ...column stuff...,
dataSource: {
transport: {
read: {
url: "/SearchPreview",
dataType: "json",
data: JSON.stringify({"values": searchValues}),
type: "POST",
contentType: "application/json; charset=utf-8"
}
}
}
});
而且我可以在 Fiddler 中看到它是在请求 body 中发送的,而不是附加到 URL 中,就像它是 GET 一样。这是怎么回事?
编辑:
添加整个 Fiddler 请求的样子:
POST http://localhost/MvcTestBed/SearchPreview HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 149
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Content-Type: application/json; charset=UTF-8
Referer: http://localhost/MvcTestBed
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: .... asp.net cookie fluff ....
0=%7B&1=%22&2=v&3=a&4=l&5=u&6=e&7=s&8=%22&9=%3A&10=%5B&11=%22&12=n&13=a&14=m&15=e&16=_&17=l&18=a&19=s&20=t&21=%3A&22=f&23=o&24=o&25=%22&26=%5D&27=%7D
编辑 2:
我已经在 jQuery ajax 构造函数上尝试了 processData
和 traditional
设置,我得到的最好的是 post body 现在看起来像
[object Object]
根据您在 fiddler 中获得的结果,似乎有东西在您的 json 字符串上调用 $.param。 jQuery 不这样做,所以它必须是 kendo 网格。
一种解决方案是直接发出 ajax 请求,然后成功地用结果初始化网格。
经过一些研究,我的解决方案是使用 read
作为函数:
$("#search-preview").kendoGrid({
columns: ...column stuff...,
dataSource: {
transport: {
read: function (options) {
url: "/SearchPreview",
dataType: "json",
data: JSON.stringify({"values": searchValues}),
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (result) {
options.success(result);
},
error: function (result) {
options.error(result);
}
}
}
}
});
我正在整理一些值以发送回 ASP.NET MVC 控制器操作。我收到无效 JSON 原始异常,但我正在使用 JSON.stringify 并且感到困惑。
我建立了一个名为 searchValues
的搜索价值控股。将 console.log(JSON.stringify({ "values": searchValues }));
放入我的代码并打开 Chrome 的控制台输出以下内容
{"values":["name_last:foo"]}
我使用完全没有 console.log
用法的一些代码将 data
参数填充到 ajax 调用。然而,在 Fiddler 中观察调用,正在发送的请求看起来像这样
0=%7B&1=%22&2=v&3=a&4=l&5=u&6=e&7=s&8=%22&9=%3A&10=%5B&11=%22&12=n&13=a&14=m&15=e&16=_&17=l&18=a&19=s&20=t&21=%3A&22=f&23=o&24=o&25=%22&26=%5D&27=%7D
我在 Kendo 网格中使用它,但指定它作为 post 发送:
$("#search-preview").kendoGrid({
columns: ...column stuff...,
dataSource: {
transport: {
read: {
url: "/SearchPreview",
dataType: "json",
data: JSON.stringify({"values": searchValues}),
type: "POST",
contentType: "application/json; charset=utf-8"
}
}
}
});
而且我可以在 Fiddler 中看到它是在请求 body 中发送的,而不是附加到 URL 中,就像它是 GET 一样。这是怎么回事?
编辑:
添加整个 Fiddler 请求的样子:
POST http://localhost/MvcTestBed/SearchPreview HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 149
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Content-Type: application/json; charset=UTF-8
Referer: http://localhost/MvcTestBed
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: .... asp.net cookie fluff ....
0=%7B&1=%22&2=v&3=a&4=l&5=u&6=e&7=s&8=%22&9=%3A&10=%5B&11=%22&12=n&13=a&14=m&15=e&16=_&17=l&18=a&19=s&20=t&21=%3A&22=f&23=o&24=o&25=%22&26=%5D&27=%7D
编辑 2:
我已经在 jQuery ajax 构造函数上尝试了 processData
和 traditional
设置,我得到的最好的是 post body 现在看起来像
[object Object]
根据您在 fiddler 中获得的结果,似乎有东西在您的 json 字符串上调用 $.param。 jQuery 不这样做,所以它必须是 kendo 网格。
一种解决方案是直接发出 ajax 请求,然后成功地用结果初始化网格。
经过一些研究,我的解决方案是使用 read
作为函数:
$("#search-preview").kendoGrid({
columns: ...column stuff...,
dataSource: {
transport: {
read: function (options) {
url: "/SearchPreview",
dataType: "json",
data: JSON.stringify({"values": searchValues}),
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (result) {
options.success(result);
},
error: function (result) {
options.error(result);
}
}
}
}
});