【问题标题】:Using Jquery/Javascript to access JSON embedded in XML使用 Jquery/Javascript 访问嵌入在 XML 中的 JSON
【发布时间】:2013-04-17 15:31:53
【问题描述】:

我有一个 jquery 函数,它与一个看起来像这样的 ASP.NET Web 服务通信

$(document).ready(function() {
                         $.support.cors = true;
             $.ajax({
                 type: "GET",
                 url: "http://www.webservice.com/blahblah.asmx/blahb123",
                 data: "tnWsGuid=TEST1",
                 dataType: "text",
                 success: function(data, status, jqxhr) {
                     xmlString = data;
                     alert(xmlString);
                 },
                 error: function (request, status, error) {
                     alert(status);
                 }

                });
        });

警报显示是这样的:

<?xml version="1.0" encoding = "utf-8"?>
<string xmlns = "http://Walkthrough/XmlWebServices/">
{"approverName":"","emailAddress":"","companyName":"ABC","address":{"streetAddress1":"12 BlahBlah","streetAddress2":"","state":"ON","zipCode":"","country":"SO","phoneNumber":""},"tabledata:"[{"vendorPart":"AAAAA","partDescription":"N/A","price":"0.00","quantity":"28"},{"vendorPart":"BBBBBBB","partDescription":"N/A","price":"0.00","quantity":"3"},{"vendorPart":"CCCCCC","partDescription":"N/A","price":"0.00","quantity":"25"}]}
</string>

我的数据类型现在是文本。但是我知道如何解析 JSON,现在我需要做的是以某种方式访问​​嵌入在 XML 信封中的 JSON 并将其转换为 JSON 对象,以便我可以使用 JQuery 来解析它。

这是我在 $.ajax 函数中尝试过的:

success: function(data, status, jqxhr) {
                     xmlString = data;
                     var jsondata = jQuery.parseJSON(xmlString.substr(xmlString.indexOf('{')));
                     alert(jsondata);
                 }

但是在IE调试器look's like this987654321@中返回了一个无效字符的错误

知道如何访问 xml 信封内的数据并将其转换为 JSON 对象,以便将其解析为 JSON 吗?我没有能力更改网络服务,所以这一切都必须在网页内完成。

【问题讨论】:

  • 请注意,$.support.cors = true 实际上并没有做任何事情,除非当前浏览器支持 CORS 并且 jQuery 错误地检测到它不支持。
  • 是否有理由在 XML 中包含 JSON 而不仅仅是直接返回 JSON?

标签: javascript jquery xml ajax json


【解决方案1】:

你可以这样做:

success: function(data, status, jqxhr) {
    var xml = $($.parseXML(data)), // Parse the XML String to a Document, and Wrap jQuery
        json = xml.find("string").text(), // Get the text of the XML
        jsonObj = $.parseJSON(json); // Parse the JSON String
}

或简写法

var jsonObj = $.parseJSON($($.parseXML(data)).find("string").text());

现场小提琴:http://jsfiddle.net/59rQA/

【讨论】:

  • 这对我有用,测试了它并在警报中执行了 jsonObj.companyName ,它显示了正确的东西!将此标记为答案,谢谢!
【解决方案2】:

我认为您的子字符串正在为 JSON 数据添加结束标记。 怎么样:

xmlString = $.parseXML(xmlString);
var jsondata = $.parseJSON($(xmlString).children('string').text());

【讨论】:

    【解决方案3】:

    当您的呼叫返回 xml 时,您可以使用 dataType:"xml" 而不是“文本”。

    然后您可以处理 xml 响应:

    var jsonData=$.parseJSON(data.find("string").text());
    

    【讨论】:

    • 您忘记了数据必须是 $(data)。除此之外,我更喜欢这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多