尝试将json转换为xml但显示错误

时间:2012-06-14 06:06:56

标签: javascript jquery asp.net xml json

我正在尝试将json结果转换为xml类型。但是,它似乎不起作用。无法找出问题所在。请帮忙。

代码是:

<script src="../Jquery Autocomplete/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../Jquery Autocomplete/jquery.json-2.2.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
    $(document).ready(function() 
    {
        $(".openModalLink").click(function()
        {
        var start=$(this).parent().parent().find(".start").val();
        var end =$(this).parent().find(".end").val();
        $.ajax(
              {
                type: "POST",
                url: "frmCollegeExamScheduleMst.aspx/ServerSideMethod",
                data: "{'paraml': '" + start + "','param2': '" + end + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: true,
                cache: false,
                success:function(result)
                {
                    var xmlDoc = $.parseXML(result);
                    var xml = $(xmlDoc);
                    var customers = xml.find("Table");
                    var data = new Array();
                    var i =0;
                    $.each(customers, function () 
                    {
                        //do something
                    });
                },
                error: function(err) {
                     alert('Error:' + err.responseText + '  Status: ' + err.status);
                }
            });
        });
    });

3 个答案:

答案 0 :(得分:0)

当您指定dataType:“json”时,响应将转换为JSON对象,并且不会保留为字符串。

尝试删除参数。

答案 1 :(得分:0)

如果您的AJAX请求的响应是xml,那么您应该相应地进行设置。

$.ajax({
  data: {paraml: start, param2: end},
  dataType: "xml",
  success:function(result) {
    var $xml = $(result);
  }
});

contentType无需data或连接。

答案 2 :(得分:0)

试试这样:

success: function(result) {
    var xmlDoc = $.parseXML(result.d);
    ...
}

注意result.d。我想你的ASP.NET PageMethod看起来像这样:

[WebMethod]
public static string ServerSideMethod(string param1, string param2)
{
    DataSet ds = ...
    return ds.GetXml();
}

此字符串是JSON序列化的。为了在客户端上检索它,ASP.NET基础结构添加了d参数:

{"d":"some xml here"}

您应该在代码中彻底改变的另一件事是替换:

data: "{'paraml': '" + start + "','param2': '" + end + "'}"

使用:

data: JSON.stringify({ param1: start, param2: end })

确保您的请求参数正确进行JSON编码。想想例如start = 'foo\'bar'会发生什么。你最终会得到:

data: {param1: 'foo'bar', param2: 'baz'}

你可以看到它完全打破你的JSON。