ajax在xml网页上调用JSON

时间:2014-09-03 12:23:47

标签: jquery ajax xml json

我对包含xml的网页进行了ajax调用。它将网页作为xml返回,如何返回它,使其更像json(将其转换为JSON)。我查看了accepts标题,但它们似乎无法正常工作。这是我的代码:

            var jqXHR = jQuery.ajax({
            url: NBSBranchSiteContextURL , 
            accepts:{json:'application/json'},
            async:false            });
    alert(jqXHR.responseText);

xml是:

  <?xml version="1.0" encoding="utf-8" ?> 
- <d:query xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:type="Microsoft.Office.Server.Search.REST.SearchResult">
  <d:ElapsedTime m:type="Edm.Int32">62</d:ElapsedTime> 
- <d:PrimaryQueryResult m:type="Microsoft.Office.Server.Search.REST.QueryResult">
  <d:CustomResults m:type="Collection(Microsoft.Office.Server.Search.REST.CustomResult)" /> 
  <d:QueryId>d6b8310d-58a6-49e0-bb0e-e9e10ca9de98</d:QueryId> 
  <d:QueryRuleId m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:QueryRuleId> 
  <d:RefinementResults m:null="true" /> 
- <d:RelevantResults m:type="Microsoft.Office.Server.Search.REST.RelevantResults">
  <d:GroupTemplateId m:null="true" /> 
  <d:ItemTemplateId m:null="true" /> 
- <d:Properties>
- <d:element m:type="SP.KeyValue">
 <d:Key>GenerationId</d:Key> 
  <d:Value>9223372036854775806</d:Value> 
 <d:ValueType>Edm.Int64</d:ValueType> 
 </d:element>
- <d:element m:type="SP.KeyValue">
 <d:Key>ExecutionTimeMs</d:Key> 
 <d:Value>15</d:Value> 
 <d:ValueType>Edm.Int32</d:ValueType> 
 </d:element>
- <d:element m:type="SP.KeyValue">
 <d:Key>QueryModification</d:Key> 
 <d:Value>CostCentreBranchPrefix:JH123 ContentClass=urn:content-class:SPSPeople</d:Value> 
 <d:ValueType>Edm.String</d:ValueType> 
 </d:element>
- <d:element m:type="SP.KeyValue">
 <d:Key>RenderTemplateId</d:Key> 
 <d:Value>~sitecollection/_catalogs/masterpage/Display Templates/Search/Group_Default.js</d:Value> 
 <d:ValueType>Edm.String</d:ValueType> 
 </d:element>
- <d:element m:type="SP.KeyValue">
 <d:Key>StartRecord</d:Key> 
 <d:Value>0</d:Value> 
 <d:ValueType>Edm.Int32</d:ValueType> 
 </d:element>
- <d:element m:type="SP.KeyValue">
 <d:Key>IsLastBlockInSubstrate</d:Key> 
 <d:Value>true</d:Value> 
 <d:ValueType>Edm.Boolean</d:ValueType> 
 </d:element>
- <d:element m:type="SP.KeyValue">
 <d:Key>IsFirstBlockInSubstrate</d:Key> 
 <d:Value>false</d:Value> 
 <d:ValueType>Edm.Boolean</d:ValueType> 
 </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>IsFirstPinnedResultBlock</d:Key> 
  <d:Value>false</d:Value> 
  <d:ValueType>Edm.Boolean</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>IsLastPinnedResultBlock</d:Key> 


 <d:Value>false</d:Value> 
  <d:ValueType>Edm.Boolean</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>IsFirstRankedResultBlock</d:Key> 
  <d:Value>true</d:Value> 
  <d:ValueType>Edm.Boolean</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>IsLastRankedResultBlock</d:Key> 
  <d:Value>true</d:Value> 
  <d:ValueType>Edm.Boolean</d:ValueType> 
  </d:element>
  </d:Properties>
  <d:ResultTitle m:null="true" /> 
  <d:ResultTitleUrl m:null="true" /> 
  <d:RowCount m:type="Edm.Int32">2</d:RowCount> 
- <d:Table m:type="SP.SimpleDataTable">
- <d:Rows>
- <d:element m:type="SP.SimpleDataRow">
- <d:Cells>
- <d:element m:type="SP.KeyValue">
  <d:Key>Rank</d:Key> 
  <d:Value>6.42380905151367</d:Value> 
  <d:ValueType>Edm.Double</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>DocId</d:Key> 
  <d:Value>11</d:Value> 
  <d:ValueType>Edm.Int64</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>PreferredName</d:Key> 
  <d:Value>Dave</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>JobTitle</d:Key> 
  <d:Value>man</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>EmailAddress</d:Key> 
  <d:Value>daveH@</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>PartitionId</d:Key> 
  <d:Value>0c37852b-34d0-418e-91c6-2ac25af4be5b</d:Value> 
  <d:ValueType>Edm.Guid</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>UrlZone</d:Key> 
  <d:Value>0</d:Value> 
  <d:ValueType>Edm.Int32</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>AAMEnabledManagedProperties</d:Key> 
  <d:Value>AttachmentURI;deeplinks;DefaultEncodingURL;ExternalMediaURL;HierarchyUrl;OrgParentUrls;OrgUrls;OriginalPath;ParentLink;Path;PictureThumbnailURL;PictureURL;PublishingImage;recommendedfor;ServerRedirectedEmbedURL;ServerRedirectedPreviewURL;ServerRedirectedURL;SiteLogo;SitePath;SPSiteURL;UserEncodingURL</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>EditProfileUrl</d:Key> 
  <d:Value m:null="true" /> 
  <d:ValueType>Null</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>ProfileViewsLastMonth</d:Key> 
  <d:Value m:null="true" /> 
  <d:ValueType>Null</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>ProfileViewsLastWeek</d:Key> 
  <d:Value m:null="true" /> 
  <d:ValueType>Null</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>ProfileQueriesFoundYou</d:Key> 
  <d:Value m:null="true" /> 
  <d:ValueType>Null</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>RenderTemplateId</d:Key> 
  <d:Value>~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Default.js</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
  </d:Cells>
  </d:element>
- <d:element m:type="SP.SimpleDataRow">
- <d:Cells>
- <d:element m:type="SP.KeyValue">
  <d:Key>Rank</d:Key> 
  <d:Value>6.42380905151367</d:Value> 
  <d:ValueType>Edm.Double</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>DocId</d:Key> 
  <d:Value>13</d:Value> 
  <d:ValueType>Edm.Int64</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>PreferredName</d:Key> 
  <d:Value>Asad</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>JobTitle</d:Key> 
  <d:Value>Software</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>EmailAddress</d:Key> 
  <d:Value>asadr@</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>PartitionId</d:Key> 
  <d:Value>0c37852b-34d0-418e-91c6-2ac25af4be5b</d:Value> 
  <d:ValueType>Edm.Guid</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>UrlZone</d:Key> 
  <d:Value>0</d:Value> 
  <d:ValueType>Edm.Int32</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>AAMEnabledManagedProperties</d:Key> 
  <d:Value>AttachmentURI;deeplinks;DefaultEncodingURL;ExternalMediaURL;HierarchyUrl;OrgParentUrls;OrgUrls;OriginalPath;ParentLink;Path;PictureThumbnailURL;PictureURL;PublishingImage;recommendedfor;ServerRedirectedEmbedURL;ServerRedirectedPreviewURL;ServerRedirectedURL;SiteLogo;SitePath;SPSiteURL;UserEncodingURL</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>EditProfileUrl</d:Key> 
  <d:Value m:null="true" /> 
  <d:ValueType>Null</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>ProfileViewsLastMonth</d:Key> 
  <d:Value m:null="true" /> 
  <d:ValueType>Null</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>ProfileViewsLastWeek</d:Key> 
  <d:Value m:null="true" /> 
  <d:ValueType>Null</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>ProfileQueriesFoundYou</d:Key> 
  <d:Value m:null="true" /> 
  <d:ValueType>Null</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>RenderTemplateId</d:Key> 
  <d:Value>~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Default.js</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
  </d:Cells>
  </d:element>
  </d:Rows>
  </d:Table>
  <d:TotalRows m:type="Edm.Int32">2</d:TotalRows> 
  <d:TotalRowsIncludingDuplicates m:type="Edm.Int32">2</d:TotalRowsIncludingDuplicates> 
  </d:RelevantResults>
  <d:SpecialTermResults m:null="true" /> 
  </d:PrimaryQueryResult>
- <d:Properties>
- <d:element m:type="SP.KeyValue">
  <d:Key>RowLimit</d:Key> 
  <d:Value>100</d:Value> 
  <d:ValueType>Edm.Int32</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>SourceId</d:Key> 
  <d:Value>b09a7990-05ea-4af9-81ef-edfab16c4e31</d:Value> 
  <d:ValueType>Edm.Guid</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>EnableInterleaving</d:Key> 
  <d:Value>true</d:Value> 
  <d:ValueType>Edm.Boolean</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>piPageImpression</d:Key> 
  <d:Value>23924_1185_2057</d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
- <d:element m:type="SP.KeyValue">
  <d:Key>SerializedQuery</d:Key> 
  <d:Value><Query Culture="en-GB" EnableStemming="True" EnablePhonetic="False" EnableNicknames="False" IgnoreAllNoiseQuery="True" SummaryLength="180" MaxSnippetLength="180" DesiredSnippetLength="90" KeywordInclusion="0" QueryText="CostCentreBranchPrefix:JH123" QueryTemplate="" TrimDuplicates="True" Site="09325ab3-1fbf-4798-8c94-9b7547bfae90" Web="b21f0568-898a-4fd0-b911-916c1491ba15" KeywordType="True" HiddenConstraints="" /></d:Value> 
  <d:ValueType>Edm.String</d:ValueType> 
  </d:element>
  </d:Properties>
  <d:SecondaryQueryResults m:type="Collection(Microsoft.Office.Server.Search.REST.QueryResult)" /> 
  <d:SpellingSuggestion m:null="true" /> 
  <d:TriggeredRules m:type="Collection(Edm.Guid)" /> 
  </d:query>

我想要它返回的地方,无论是<d:Key> PreferredName,JobTitle还是电子邮件<d:Value>所以在这种情况下,Dave,Asad的名字。 jobtitle和daveH @ and asadr @的电子邮件的人和软件。未来可能会有更多的值

2 个答案:

答案 0 :(得分:1)

如果没有设置这样做,您就不能强制服务器将页面提供为JSON(或其他任何内容)。因此,正如一些评论所暗示的那样,如果你想要它在JSON中,你将不得不转换你得到的东西,尽管你可能不需要(因为你还没有说出你想要的东西用数据

答案 1 :(得分:1)

您可以使用dataType: "xml"指定响应是XML,然后阅读data回调中的success参数或使用responseXML属性。可以使用DOM API遍历结果,与用于遍历HTML文档的API相同。这意味着您可以使用jQuery来抽象DOM,就像使用HTML DOM选择和遍历一样。

假设您的XML是

<library>
    <book title="The Sun Also Rises" author="Hemingway" />
    <book title="The Hunger Games" author="Collins" />
    <magazine title="Time" issue="578" />
    <magazine title="Tacos Monthly" issue="3" />
</library>

您可以使用jQuery获取并检查它:

var jqXHR = jQuery.ajax({
    url: NBSBranchSiteContextURL,
    dataType: "xml", 
    success: function(data) {
        $xml = $(data);

        // get title attribute of the first book, "The Sun Also Rises"
        $xml.find("book:eq(0)").attr("title");

        // get author attribute of the book entitled "The Hunger Games"
        $xml.find("book[title='The Hunger Games']").attr("author");

        $xml.find("magazine").each(function(idx, mag) {
            var $m = $(mag);
            alert($m.attr("title") + " " + $m.attr("issue"));
        });
    }
});