如何解析或访问jQuery的Web服务调用返回的值?

时间:2011-04-04 14:32:35

标签: jquery web-services parsing

我正在尝试使用jQuery调用Web服务。由于某种原因,结果以XML格式返回...除了自己编写解析器之外......还有更好的方法来获得结果。

这是返回的价值:

<?xml version="1.0" encoding="utf-8"?>\r\n<string xmlns="http://tempuri.org/">"Hello World"</string>

这是HTML:

<script type="text/javascript">

    var url = '<%=ResolveUrl("~/Services/ProjectDialog.asmx/HelloWorld")%>';

    function callWebService() {

        jQuery.ajax({
            cache: false,
            type: 'POST',
            complete: onComplete,
            data: null,
            dataType: 'application/json; charset=utf-8',
            error: onError,
            success: onSuccess,
            url: url
        });
    }

    function onComplete(status, xmlHttpRequest) {
        var stop = "";
    }
    function onError(xmlHttpRequest, status, error) {
        var stop = "";
    }
    function onSuccess(data, status, xmlHttpRequest) {
        var stop = "";
    }

    jQuery(document).ready(function() {
    });

</script>

<input type="button" value="Run Web Service" onclick="callWebService();" />

这是网络服务:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;

namespace My.Services
{
    /// <summary>
    /// Summary description for ProjectDialog
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class ProjectDialog : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您需要将ScriptMethodAttribute应用于您的网络服务并指定ResponseFormat(json是默认设置)

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string HelloWorld()
{
    return "Hello World";
}

这很可能是您最好的结果,因为您似乎希望根据.ajax()电话以json的形式请求数据。 注意根据jQuery docs,dataType应该只是json

  

可以进行不同的数据处理   通过使用dataType选项实现。   除了普通的xml,dataType也可以   html,json,jsonp,script或text。

<强>更新 如果您正确指定contentType,您似乎会得到有效的json响应。

jQuery.ajax({
    cache: false,
    type: 'POST',
    complete: onComplete,
    data: null,
    contentType: "application/json; charset=utf-8",
    dataType: 'json',
    error: onError,
    success: onSuccess,
    url: url
});

答案 1 :(得分:0)

我可以想到在这种情况下有用的三个选项 -

  1. 在Web服务的方法中包含此属性(以JSON而不是XML的形式返回) -

    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

  2. Parse the XML在客户端

  3. 或者使用IHttpHandler而不是Web服务。它们使用起来既简单又容易。