这是我的AJAX电话:
var dataString = "{existingProject:'"+ $("#existingProject").val() + "',newProjName:'" + $("#newProjName").val()+"'}";
$.ajax({
type: "POST",
url: "manageProjects.html",
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.status + " " + msg.responseText);
$("#grid").trigger("reloadGrid");
},
error: function (errormessage) {
alert(errormessage.status + " " + errormessage.responseText);
}
});
..这里是我的Spring MVC控制器中的方法签名我期望处理请求:
@RequestMapping(value="/manageProjects",produces="application/json",method=RequestMethod.POST)
public StatusResponse manageProjects(
@RequestParam("existingProject") String existingProj,
@RequestParam("newProjName") String newProj,
HttpSession session){
我整天都在修补这个ajax电话,我只是没有看到这个问题。我已经尝试使用带有数据参数的load,post,我尝试过没有设置contentType和dataType以及它。
错误消息中的responseText告诉我调用在语法上不正确....但是没有任何关于为什么......
的线索我错过了一些愚蠢的东西。感谢您的任何见解...
答案 0 :(得分:0)
这不是有效的JSON。
只做
var dataString = JSON.stringify({
existingProject: $("#existingProject").val(),
newProjName: $("#newProjName").val()
});
这适用于大多数浏览器。在旧版浏览器中,您必须包含类似于http://www.sitepoint.com/javascript-json-serialization/的定义。请注意,此处的定义允许您使用先前定义的(本机)版本(如果存在)。
var JSON = JSON || {};
// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
var t = typeof (obj);
if (t != "object" || obj === null) {
// simple data type
if (t == "string") obj = '"'+obj+'"';
return String(obj);
}
else {
// recurse array or object
var n, v, json = [], arr = (obj && obj.constructor == Array);
for (n in obj) {
v = obj[n]; t = typeof(v);
if (t == "string") v = '"'+v+'"';
else if (t == "object" && v !== null) v = JSON.stringify(v);
json.push((arr ? "" : '"' + n + '":') + String(v));
}
return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};
答案 1 :(得分:0)
您是否尝试过将数据放入对象并将其设置为$ .ajax数据选项?
不必进行字符串化。
var data= {"existingProject" : $("#existingProject").val(), "newProjName" : $("#newProjName").val()};
$.ajax({
type: "POST",
url: "manageProjects.html",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.status + " " + msg.responseText);
$("#grid").trigger("reloadGrid");
},
error: function (errormessage) {
alert(errormessage.status + " " + errormessage.responseText);
}
});
答案 2 :(得分:0)
我遇到了同样的问题。我在firefox中使用了篡改数据插件来检查jquery发送的数据。有效载荷是:
POSTDATA =消息=测试+消息
我在我的JQuery请求中应用了JayC给出的修改并且它有效。细节:
JayC给出的修改:
var dataString = JSON.stringify({
existingProject: $("#existingProject").val(),
newProjName: $("#newProjName").val()
});
我的要求:
function post(dest) { var dataString = JSON.stringify({ message: 'test message'}); jQuery.ajax({ type: "POST", url: ndest, crossDomain: true, contentType: "application/json; charset=utf-8", dataType: "json", data: dataString, success: function (data, status, jqXHR) { }, error: function (response, textStatus, errorThrown) { handleError(response, textStatus, errorThrown); } }); };
处理请求的Spring mvc控制器部分:
@RequestMapping(value="myapp/{id}", method={RequestMethod.POST, RequestMethod.PUT})
@ResponseStatus(HttpStatus.CREATED)
public void setNote(@PathVariable("id") String user, @RequestBody MyModel content) {
现在有效载荷是:
POSTDATA = {“message”:“test message”}
一些提示:
@RequestBody MyClass content
。 MyClass应该有正确的相应getter和setter以及一个空的构造函数。