Используйте JQuery для извлечения текстового значения элемента xml под названием «Заголовок» в IE 8 - PullRequest
1 голос
/ 29 ноября 2010

Я написал поисковый сервис, основанный на Solr, для индексации базы данных объектов, называемых клипами. Служба поиска возвращает результаты поиска, отформатированные с использованием форматов расширений атомов OpenSearch. Клипы имеют различные свойства, ClipID и Title - это два свойства, относящиеся к моему вопросу.

Я написал очень простую программу на JavaScript, использующую jquery, которая асинхронно вызывает службу поиска в фоновом режиме и заполняет таблицу значениями ClipId и Title. Программа отлично работает на Chrome, Safari и FF. Однако в IE просто не удается проанализировать значение атрибута Title. Это как если бы «Заголовок» был зарезервированным именем тега XML, а jQuery в IE просто не может его найти.

Вот выдержка из моей программы JavaScript:

   // Ajax call to the search service over HTTP.
   var doSearch = function(){
     var query = "Title:" + $("#searchQuery").val() + "*";

     $.ajax({
      url : "/quantel/search/select" ,
      data:{q:query},
      error:function(request,status,error){
       alert(request + "," + status + "," + error);
      },
      dataType: "text/xml",
      success:function(data,status,request){
       // Clear the data table.
       $("#searchResults").dataTable().fnClearTable();
       // Search for all clip entries in the XML document.
       $(data).find("entry").children("content").each(function(index,element) {

        var clipID= $(element).children("ClipID").text();
        var title = $(element).children("Title").text();

        // Add the clip id and title to the table.
        $("#searchResults").dataTable().fnAddData([clipID,title]);
       });    
      }
     });
   };

А вот пример результатов поиска, которые я пытаюсь проанализировать. Как вы можете видеть, тег Content содержит тег Title, но IE просто не может его найти.

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
 <title>ProjectFolders Search</title>
 <link href="http://localhost:8182/quantel/search/select?q=guillaume*&amp;rows=100&amp;" />
 <link rel="self" href="http://localhost:8182/quantel/search/select?q=guillaume*&amp;rows=100&amp;" />
 <link rel="first" href="http://localhost:8182/quantel/search/select?q=guillaume*&amp;rows=100&amp;start=0" />
 <link rel="last" href="http://localhost:8182/quantel/search/select?q=guillaume*&amp;rows=100&amp;start=0" />
 <link rel="previous" href="http://localhost:8182/quantel/search/select?q=guillaume*&amp;rows=100&amp;start=0" />
 <link rel="next" href="http://localhost:8182/quantel/search/select?q=guillaume*&amp;rows=100&amp;start=0" />
 <updated>2010-11-29T14:45:53.796Z</updated>
 <author>
  <name>Quantel</name>
 </author>
 <id>urn:uuid:cd9d3362-2159-4c27-a99e-9691dd4ff707</id>
 <opensearch:totalResults>6</opensearch:totalResults>
 <opensearch:startIndex>0</opensearch:startIndex>
 <opensearch:itemsPerPage>100</opensearch:itemsPerPage>
 <entry>
  <title type="html">Guillaume_clip</title>
  <updated>2010-10-25T11:10:17.000+01:00</updated>
  <id>urn:clipid:389685</id>
  <link href="http://localhost:8182/quantel/search/select?q=ClipID:389685" />
  <content type="text/xml">
   <PlaceHolder>0</PlaceHolder>
   <HasEditData>0</HasEditData>
   <id>389685</id>
   <ClipID>389685</ClipID>
   <Created>2010-10-25T11:10:17.000+01:00</Created>
   <NumVidTracks>0</NumVidTracks>
   <CloneZone>119</CloneZone>
   <MosActive>0</MosActive>
   <Template>0</Template>
   <Completed>2010-10-25T11:10:18.000+01:00</Completed>
   <Frames>0</Frames>
   <Title>Guillaume_clip</Title>
   <UnEdited>1</UnEdited>
   <ClipGUID>7e5aef9c7da44bacbfb49500710138cf</ClipGUID>
   <CloneID>389685</CloneID>
   <NumAudTracks>0</NumAudTracks>
  </content>
 </entry>
</feed>

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

dataType опция вызова $.ajax имеет недопустимое значение. Это должно быть xml. Смотри http://api.jquery.com/jQuery.ajax

В вашем случае с недопустимым типом данных IE анализирует содержимое как HTML, поэтому элемент title перемещается в элемент head.

Также MIME-тип ответа должен быть text/xml. Если вам нужно сохранить какой-либо другой тип MIME, вы можете проанализировать XML-ответ, как описано здесь: http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests

0 голосов
/ 29 ноября 2010

Заголовок должен находиться в другом пространстве имен. Вы можете попробовать

$ (elment) .find ( 'атом \: Название'). Текст ();

На iPad не могу попробовать сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...