从Javascript调用webservice时,文档对象而不是JSON

时间:2014-03-05 21:54:16

标签: c# javascript jquery json web-services

我正在运行从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
......

3 个答案:

答案 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。太奇怪了,或者是它?。