我正在运行从javascript到webservice的Ajax调用:
$.ajax(signingURI + "?fileName=" + fileName)
.done(function (data){
});
我的网络服务:
[WebMethod]
public string PolicyGenerator(string fileName){
return "{\"res\":\"asdasda\"}" ;
}
在检查data参数时,我得到一个 XML文档对象而不是JSON 。我做错了什么?
在观察表达式中:
data: document
URL: ""
anchors: HTMLCollection[0]
applets: HTMLCollection[0]
baseURI: null
body: null
characterSet: null
charset: undefined
childNodes: NodeList[1]
compatMode: "CSS1Compat"
constructor: DocumentConstructor
cookie: [Exception: DOMException]
defaultCharset: undefined
defaultView: null
......
答案 0 :(得分:1)
如果您想使用HTTP GET,请使用ScriptMethod
修饰您的网络服务方法。
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public string PolicyGenerator(string fileName){
return "{\"res\":\"asdasda\"}" ;
}
此外,不要在事务的任何一端手动构建JSON 。 jQuery为你序列化对象。
$.ajax({
...
data: { fileName: 'test.jpg' }
});
使用GET请求,data
将被序列化到查询字符串中。使用POST,它以标准x-www-form-urlencoded样式在请求实体主体中发送。如果要在POST正文中发送JSON,请使用JSON.stringify
。
您的服务器端函数应返回可序列化的类。 .NET将为您输出正确的JSON。
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public PolicyGeneratorResponse PolicyGenerator(string fileName){
return new PolicyGeneratorResponse(...);
}
...
class PolicyGeneratorResponse {
public string res;
}
答案 1 :(得分:0)
尝试在请求中添加dataType:
$.ajax(signingURI + "?fileName=" + fileName, { dataType: 'json' })
.done(function (data){
});
答案 2 :(得分:0)
有些事情很奇怪。似乎webservice确实返回了JSON,但是当我使用.done
回调时,我无法读取它。
$.ajax({
type: "POST",
url: signingURI,
data: "{'fileName':'" + encodeURI('test.jpg') + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg){
在其他属性中使用成功回调给了我JSON。太奇怪了,或者是它?。