GetData(...)
方法没问题,但SetSimple(...)
方法抛出错误400。
使用Javascript:
$.ajax(url,
{
type: action,
timeout: 3000,
data: { value: 123 },
contentType: "application/json; charset=utf-8",
//dataType: "json",
success: function (data, textStatus, jqXHR) {
displayInfo("success: "+data);
},
error: function(jqXHR, textStatus, errorThrown ) {
displayInfo("error: "+errorThrown+" "+textStatus);
}
}
);
C#:
[WebGet(RequestFormat = WebMessageFormat.Json)]
string GetData(int value);
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
string SetSimple(int value);
要运行/测试它我在浏览器中打开了服务,然后在另一个浏览器中使用javascript我的测试页面。 (而dataType:“json”似乎没有帮助。) 并且fiddler响应显示“服务器在处理请求时遇到错误。请参阅服务器日志以获取更多详细信息”,但我在事件日志中看不到任何内容。任何人都会看到我做错了什么?
答案 0 :(得分:2)
您应该将JavaScript对象转换为字符串。
JSON.stringify(data)
然后在你的例子上
$.ajax (url,
{
type: action,
timeout: 3000,
data: JSON.stringify({ value: 123 }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data, textStatus, jqXHR) {
displayInfo("success: "+data);
},
error: function(jqXHR, textStatus, errorThrown ) {
displayInfo("error: "+errorThrown+" "+textStatus);
}
}
);
答案 1 :(得分:0)
您的ajax请求正在将“data”属性设置为{value:123}。您需要将适当的对象传递给CompositeObject的SetObject方法。 ajax请求看起来像是将它用作实用程序函数,因此只需将数据作为参数传递,以便ajax请求为:
var makeAjaxCall = function(url, action, data) {
$.ajax(url,
{
type: action,
timeout: 3000,
data: data,
contentType: "application/json; charset=utf-8",
success: function (data, textStatus, jqXHR) {
displayInfo("success: "+data);
},
error: function(jqXHR, textStatus, errorThrown ) {
displayInfo("error: "+errorThrown+" "+textStatus);
}
}
);
}