【问题标题】:Trying to convert json to xml but shows error尝试将 json 转换为 xml 但显示错误
【发布时间】:2012-06-17 03:48:43
【问题描述】:

我正在尝试将 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);
                }
            });
        });
    });

【问题讨论】:

  • 为什么要以 JSON 格式发送 XML?它们是两种完全不同的格式。
  • ServerSideMethod 页面方法返回什么?它的签名是什么。此外,它似乎不起作用是一个极差的问题描述。
  • 对灯光描述感到抱歉。 ServerSideMethod 将查询数据库并返回一个数据集。我在该方法中使用了 return ds.GetXml() 来转换它。

标签: javascript jquery asp.net xml json


【解决方案1】:

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

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

不需要contentType 也不需要连接data

【讨论】:

  • 这个返回错误。错误类似于:错误:"\u003cNewDataSet\u003e\r\n \u003cTable\u003e\r\n \u003cSTU_NAME\u003egagan\u003c/STU_NAME\u003e\r\n \u003cREG\u003e1\u003c/REG\u003e\r \n \u003c/Table\u003e\r\n \u003cTable\u003e\r\n \u003cSTU_NAME\u003esanthana\u003c/STU_NAME\u003e\r\n \u003cREG\u003e2\u003c/REG\u003e\r\n \u003c /Table\u003e\r\n\u003c/NewDataSet\u003e" 状态:200
  • ServerSideMethod的结果通过return ds.GetXml()转换成字符串格式
  • @Prince,那是你的 XML。此外,您还没有显示错误发生的位置
  • 代码输入'success:function(result){alert(result);},'时出现错误
  • 是的,我也试过了。但没有任何帮助给我同样的错误。
【解决方案2】:

试试这样:

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。

【讨论】:

  • thnx..是的,现在一切正常。但是在这一步出现错误 success:function(result) { $xmlDoc = $.parseXML(result.d);} 显示什么也没有尝试通过删除 .d 也
  • result.d 的值是多少?
【解决方案3】:

当您指定 dataType: "json" 时,响应将转换为 JSON 对象,而不是字符串。

尝试删除参数。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 2022-06-13
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多