我有一个带有textarea的表单,在尝试发送信息时,我正在使用JSON.stringify,我收到错误。这是代码:
$.ajax({
type: "POST",
dataType: "json",
data: JSON.stringify({
reportid: data["reportid"], //Guid
assessmentId: data["assessmentId"], //Guid
title: data["title"], //string
body: data["body"], //string
section: data["section"], //string
reportsection: data["reportSection"] //string
}),
url: "/Assessments/ModifyAssessmentTemplateText",
success: function (data) {
lastModified = data["LastModified"];
updateLastModified(lastModified);
alert(data);
}
});
我的控制器方法设置如下:
[POST("ModifyAssessmentTemplateText")]
[AjaxOnly]
public JsonResult ModifyAssessmentTemplateText(Guid reportid, Guid assessmentid, string title, string body, string section, string reportSection)
{
//...
}
我收到500服务器错误。
我知道当我尝试测试时,只有一个参数,reportid,并且我的方法接受了一个字符串,它就可以了。但是当我把它设置为Guid时,我得到500错误。有没有办法解析JSON服务器端?
编辑:
注意:当我不使用数据时,我会这样做 url:“/ Assessments / ModifyAssessmentTemplateText?reportid =”+ reportid
它没有问题。
答案 0 :(得分:1)
您不必调用JSON.stringify
,因为您需要参数,因此它应该是键值对,并且您正在尝试POST JSON对象。
您可以创建与JavaScript对象匹配的参数,然后使用JSON.stringify
,这样模型绑定器会尝试将其反序列化为对象。
答案 1 :(得分:1)
所以我设法在http://encosia.com/asmx-scriptservice-mistake-invalid-json-primitive/找到答案。基本上,我需要做的是将JSON字符串封装在引号中。这使得字符串成为JSON字符串而不是JavaScript Object文字。
引自网站:
The solution is as simple as two single-quotes:
// RIGHT
$.ajax({
type: 'POST',
contentType: 'application/json',
dataType: 'json',
url: 'WebService.asmx/Hello',
data: '{ FirstName: "Dave", LastName: "Ward" }'
});
你发现了差异吗? 现在,data参数不是JavaScript对象文字,而是JSON字符串。 差异很微妙,但有助于理解。因为它是一个字符串, jQuery不会尝试进行任何进一步的转换, 并且JSON字符串将在传递给ASMX ScriptService时不受阻碍。
答案 2 :(得分:1)
我认为到目前为止的答案正在围绕这一点展开。您的数据根本不必是字符串,您尝试过吗?
$.ajax({
type: "POST",
dataType: "json",
data: {
reportid: data["reportid"], //Guid
assessmentId: data["assessmentId"], //Guid
title: data["title"], //string
body: data["body"], //string
section: data["section"], //string
reportsection: data["reportSection"] //string
},
url: "/Assessments/ModifyAssessmentTemplateText",
success: function (data) {
lastModified = data["LastModified"];
updateLastModified(lastModified);
alert(data);
}
});
答案 3 :(得分:0)
您是否尝试将guid作为字符串发布并解析出服务器上的Guid?
答案 4 :(得分:0)
如果您尝试将数据发送为json
。你应该知道:
Specifying the Data Type for AJAX Requests
json
- 将响应评估为JSON,并将JavaScript对象发送给成功回调。
但是,粘合剂如何检测到json
请求?
按contentType: 'application/json; charset=utf-8'