J'ai écrit un service de recherche basé sur Solr pour indexer une base de données d'objets appelés clips. Le service de recherche renvoie les résultats de recherche formatés à l'aide des formats d'extensions d'atome OpenSearch. Les clips ont diverses propriétés, ClipID et Title sont les deux propriétés pertinentes à ma question.Utilisez JQuery pour extraire la valeur textuelle de l'élément xml appelé "Title" dans IE 8
J'ai écrit un programme JavaScript très simple en utilisant jquery qui invoque le service de recherche de manière asynchrone en arrière-plan et remplit une table avec les valeurs ClipId et Title. Le programme fonctionne correctement sur Chrome, Safari et FF. Cependant, sur IE, il échoue simplement à analyser la valeur de l'attribut Title. C'est comme si "Title" est un nom de balise XML réservé et que jQuery sur IE simple ne le trouve pas.
Voici l'extrait de mon programme 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]);
});
}
});
};
Et voici un échantillon des résultats de recherche que je suis en train d'analyser. Comme vous pouvez le voir, la balise Content contient une balise Title, mais IE ne peut tout simplement pas la trouver.
<?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*&rows=100&" />
<link rel="self" href="http://localhost:8182/quantel/search/select?q=guillaume*&rows=100&" />
<link rel="first" href="http://localhost:8182/quantel/search/select?q=guillaume*&rows=100&start=0" />
<link rel="last" href="http://localhost:8182/quantel/search/select?q=guillaume*&rows=100&start=0" />
<link rel="previous" href="http://localhost:8182/quantel/search/select?q=guillaume*&rows=100&start=0" />
<link rel="next" href="http://localhost:8182/quantel/search/select?q=guillaume*&rows=100&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>
Mais la ligne avec '" ClipID "' fonctionne? (Aussi, pouvez-vous essayer 'var title = element.getElementsByTagName (" Title ") [0];' à la place?) – Tomalak
L'option 'dataType' de l'appel $ .ajax a une valeur invalide. Ce devrait être "xml". voir http://api.jquery.com/jQuery.ajax/ – thorn
La ligne avec ClipID fonctionne. En fait, tenter de récupérer tous les champs autres que Title fonctionne. J'ai essayé var title = element.getElementsByTagName ("Title") [0] .text et cela fonctionne sur Chrome mais pas sur IE. –