2013-04-17 44 views
1

我有與ASP.NET Web服務看起來像這樣使用jQuery/Javascript來訪問JSON嵌入XML

$(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); 
       } 

       }); 
     }); 

警報顯示的這個通信的jQuery函數:

<?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> 

我dataType現在是文本。我知道如何解析JSON,但是現在我需要做的是以某種方式訪問​​嵌入在XML信封中的JSON並將其轉換爲JSON對象,以便我可以使用JQuery來解析它。

以下是我在$就功能已經嘗試:

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

但隨着無效字符的錯誤,在IE調試look's like this

任何想法如何,我可以訪問返回數據在xml信封裏面並且變成一個JSON對象,所以我可以把它解析爲JSON?我無法更改Web服務,因此必須全部在網頁中完成。

+0

需要注意的是'$ .support.cors = TRUE;除非當前的瀏覽器支持CORS和jQuery不正確地檢測它沒有實際上並沒有做任何事情。 –

+0

是否有你在XML內部擁有JSON的原因,而不是直接返回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/

+0

這工作對我來說,測試了它,並在警報中做了jsonObj.companyName,它顯示了正確的東西!將此標記爲答案,謝謝! – Surep

1

我認爲你的子串正在爲JSON數據添加結束標記。 如何:

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

當您的通話將返回XML,你可以使用dataType:"xml"而不是「文本」。

然後,您可以處理XML響應:

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

您忘記了數據需要$(數據)。除此之外,我更喜歡這個答案。 – DrewB