jquery - [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

标签 jquery ajax web-services

在 ASP.net Web 服务中,如果不指定上述内容,默认的响应格式是什么? 另外,如果我的网络服务如下:

[WebMethod()]
        public List<Sample> GenerateSamples(string[][] data)
        {
            ResultsFactory f = new ResultsFactory(data);

            List<Sample> samples = f.GenerateSamples();
            return samples;
        }

返回对象列表,如果我将响应格式更改为 JSON,则必须将返回类型更改为字符串,那么如何在 javascript 中访问对象?

目前我在 JS 中调用此 Web 服务,例如:

 $.ajax({
    type: "POST",
    url: "http://localhost/TemplateWebService/Service.asmx/GenerateSamples",
        data: jsonText,

        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var samples = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;

            if (samples.length > 0) {
                doSomethingHere(samples);
            } else {
                alert("No samples have been generated");
            }



        },

        error: function(xhr, status, error) {
            var msg = JSON.parse(xhr.responseText);
            alert(msg.Message);
        }

    });

但我注意到,尽管一切都工作得很好,但 eval 语句永远不会被执行,这意味着 Web 服务总是返回一个字符串!

所以我的问题是,[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 在 Web 服务定义方面是否必要?

现在的情况是,我可以使用样本数组并访问每个对象及其属性,就像我通常在任何 OOP 代码中一样,这非常方便,并且一切正常,但我只是想确保我我的设置中没有遗漏任何东西。

我从 Encosia 方面学习了将 Jquery 的 ajax 与 asp.net 相结合的基础知识,并且那里没有提到响应类型 - 我在另一个网站上读到它,我不确定它有多重要。

http://www.codeproject.com/KB/webservices/JsonWebServiceJQuery.aspx

列出了 ASP.NET Web 服务端的 4 个不同更改。我的 web.config 中只有前 2 个。服务本身和 Sample 类是在没有任何序列化的情况下实现的,但它确实具有属性。我猜 Web 服务默认是 JSON 吗?只要你的对象有属性,它们就默认是可序列化的?在我读到这篇文章之前,这是我的理解。

最佳答案

ResponseFormat 属性不是必需的。包括客户端和服务器设置,只需要四件事即可做到这一点:

  • 在 web.config 中添加 ScriptHandlerFactory HttpHandler。
  • 使用 [ScriptService] 属性装饰您的 Web 服务。
  • 使用 POST 动词请求服务的方法。
  • 请求内容类型为“application/json”的服务方法。

当您执行这四件事时,服务方法的响应将自动序列化为 JSON。

关于jquery - [ScriptMethod(ResponseFormat = ResponseFormat.Json)],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851117/

相关文章:

jquery - IIS HTTP 错误 400(无效动词)——请求损坏?

web-services - 基于手势识别的验证码

eclipse - Mule 和 Eclipse 的 WSDL 问题

java - SOAP/HTTP + WSDL 作为契约。 JAX-WS 怎么样?

javascript - 如何使用 Javascript 将内容动态加载到 DIV 中

jquery - IE7 中的 Z-INDEX 问题

javascript - 用指向其内容 jquery 的链接替换 ​​<img> 标签

javascript - 在 CodeIgniter 中使用 AJAX 提交带有图像的表单

mysql - JQuery 数据表 + Codeigniter(静态列)

c# - 如何隐藏一个div并在MVC中的按钮点击事件中显示另一个