我正在做一个wcf服务电子邮件的帖子请求是我的对象,它具有属性主题和正文。 当我尝试进行ajax调用时,我收到400 Bad Request错误,这是我的代码。我不知道如何在stringify函数中放置一个对象。
{
"email": {
"subject": "b",
"body": "d"
}
}
$('#Button1').click(function() {
var email = {
subject: $("#Text1").val(),
body: $("#Text1").val(),
}
$.ajax({
url:"http://localhost:29143/Restwebservice.svc/sendmail",
type: 'post',
cache: false,
contentType: "application/json; charset=utf-8",
dataType: 'json',
//data: JSON.stringify(email)
data: JSON.stringify(email),
success: function (data) {
$('#target').html(data.msg);
}
});
答案 0 :(得分:0)
当json无效时发生错误请求,此处出现此错误是因为您有一个名为"电子邮件"的对象,然后在Button1上点击您正在定义名为' email&#39的新变量;。这里没有引用上一个电子邮件对象,而是在没有" var email"的成员时尝试为其成员分配值。尝试做这样的事情
Object email = new Object();
email.subject =$("#Text1").val();
email.body = $("#Text1").val();
现在将此电子邮件'字符串化。对象,但要确保在服务器端收到与电子邮件相同的对象,因为如果发送和接收对象不匹配则抛出错误的请求。
答案 1 :(得分:0)
你没有向我们展示sendmail
方法,但是我假设从ajax调用的数据结构看它应该是这样的:
[DataContract]
public class EmailEntity
{
[DataMember]
public string subject { get; set; }
[DataMember]
public string body { get; set; }
}
现在sendmail
方法看起来像这样
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public void sendmail(EmailEntity emailentity)
{
............
}
请注意,请求类型被包装,因此在从ajax发布数据时,您最好首先创建一个emailentity
对象作为包装器对象。
var emailentity = {};
emailentity.subject = "Test subject";
emailentity.body = "Test body";
var jsonObj = JSON.stringify(emailentity);
var dataToSend = '{"emailentity":'+jsonObj+'}';
此dataToSend
现在将通过ajax发布。
$.ajax({
type: "POST",
async: false,
data: dataToSend,
url: "../path/myService.svc/sendmail",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () {
alert("success");
},
error: function () {
alert("Error");
}
});
希望这有帮助。