Domanda

Edit: Mi mancavano due cose qui.La mancanza di "Content-Type:text/xml" nell'intestazione restituito dalla chiamata AJAX è stata impedita JQuery per il trattamento di dati restituiti come un documento.Una volta che è stata gestita correttamente, questo codice viene analizzato correttamente e uscita solo l'indice e il nome del progetto.

$("a.getprojects").click(function(d){
  d.preventDefault();
  var api_token = $("#token").val();
  var form_fbod = $("#fbod").val();
  $.post("fbinfo.php", {fbod: form_fbod, token: api_token, cmd : 'listProjects', extra:''}, function(returned_xml) {
    var output = '';
    $(returned_xml).find("project").each(function(){
      var project = $(this);
      output += project.find("ixProject").text();
      output += " ";
      output += project.find("sProject").text();
      output += "\n";
    });
    $("#output").val(output);
  });
});

Originale:Sto avendo divertimento con il FogBugz API e JQuery per mettere insieme quello che penso sarà un po ' di fresco strumento, ma sto correndo in un JQuery limitazione.CDATA tag sembrano confondere.

Ecco il codice che sto usando:

  $("a.getprojects").click(function(d){
    d.preventDefault();
    var api_token = $("#token").val();
    var form_fbod = $("#fbod").val();
    $.post("fbinfo.php", {fbod: form_fbod, token: api_token, cmd : 'listProjects', extra:''}, function(xml) {
      var output = xml;
      $(xml).find("project").each(function(){
        var project = $(this);
        output += "\n\n";

        output += project.html();

      });
      $("#output").val(output);

    });
  });

Ed ecco l'output ottengo:

<?xml version="1.0" encoding="UTF-8"?><response>
    <projects>
<project>
<ixProject>2</ixProject>
<sProject><![CDATA[Inbox]]></sProject>
<ixPersonOwner>2</ixPersonOwner>
<sPersonOwner><![CDATA[Rich]]></sPersonOwner>
<sEmail><![CDATA[rich@example.com]]></sEmail>
<sPhone></sPhone>
<fInbox>true</fInbox>
<ixGroup>1</ixGroup>
<iType>1</iType>
<sGroup><![CDATA[Internal]]></sGroup>
</project>

<project>
<ixProject>1</ixProject>
<sProject><![CDATA[Sample Project]]></sProject>
<ixPersonOwner>2</ixPersonOwner>
<sPersonOwner><![CDATA[Rich]]></sPersonOwner>
<sEmail><![CDATA[rich@example.com]]></sEmail>
<sPhone></sPhone>
<fInbox>false</fInbox>
<ixGroup>1</ixGroup>
<iType>1</iType>
<sGroup><![CDATA[Internal]]></sGroup>
</project>
</projects>
</response>

<ixproject>2</ixproject>
<sproject></sproject>
<ixpersonowner>2</ixpersonowner>
<spersonowner></spersonowner>
<semail></semail>
<sphone></sphone>
<finbox>true</finbox>
<ixgroup>1</ixgroup>
<itype>1</itype>
<sgroup></sgroup>

<ixproject>1</ixproject>
<sproject></sproject>
<ixpersonowner>2</ixpersonowner>
<spersonowner></spersonowner>
<semail></semail>
<sphone></sphone>
<finbox>false</finbox>
<ixgroup>1</ixgroup>
<itype>1</itype>
<sgroup></sgroup>

Sembrerebbe che il parsing di XML nativo che JQuery elimina il contenuto del CDATA elementi.FogBugz mette la maggior parte della nostra stringa di dati in CDATA tag perché ci permettono di caratteri speciali e simboli di punteggiatura in più luoghi.Allegando l'uscita in CDATA tag ci consente di riposo relativamente certi che stiamo inviando dati validi tramite la nostra API.PHP parsing di XML funziona bene.La mia ricerca online dei rendimenti alcune persone lamentarsi di questo, ma non molto il lavoro fatto.Con JQuery, estensibilità, vorrei pensare che c'è qualcosa là fuori.Chiunque altro ha compiuto questo?

È stato utile?

Soluzione

Sembrerebbe che il parsing di XML nativo che JQuery

Non c'è il parsing di XML nativo di jQuery.Si utilizza solo la standard XMLHttpRequest.responseXML proprietà per ottenere un XML DOM per la risposta.

elimina il contenuto del CDATA elementi

Che Tipo di Contenuto ti invio la risposta?Perché ho il sospetto che non si è analizzato come XML a tutti.In questo caso jQuery sarà il passaggio indietro di una stringa del documento, invece di un file XML DOM.

Quindi quando si chiama “$(xml)”, sarà la creazione di contenuto del documento da quella stringa(*) — analizzato come HTML, non XML.In HTML non c'è nessuna tale cosa come una sezione CDATA, in modo che i browser potrebbe disfarsene, o trattarli come i commenti.

Ho il sospetto che questo perché “project.html()” non dovrebbe in realtà il lavoro quando in un documento XML.‘html()’ restituisce lo stesso standard ‘innerHTML’ di proprietà(**), che funziona solo per i documenti HTML;esso è definito su elementi XML.

Allegando l'uscita in CDATA tag ci consente di riposo relativamente certi che stiamo inviando dati validi tramite la nostra API.

Beh, ‘relativamente’:se i dati contengono anche “]]>” si continua a perdere.macchina XML generati dovrebbe davvero solo utilizzare l'entità di codifica in modo normale.Di solito il server di applicazione dovrebbe essere utilizzando in modo corretto gli strumenti XML per generare la risposta in questo caso sarà fatto automaticamente.

(*:Io non ho mai capito quando jQuery sente il bisogno di squish frammento di documento creazione e CSS selezione nella stessa funzione.Sono completamente diverse operazioni che non vuole confondersi, come può essere accaduto qui.)

(**:In realtà, tenta di filtrare jQuery attributi personalizzati in primo luogo, utilizzando un'espressione regolare.Purtroppo dal regex impossibile analizzare l'HTML, sarà lieto di filtrare valido parti di testo che sembrano attributi HTML.Whoops.Non uno di jQuery e più parti.)

Altri suggerimenti

jquery, infatti, hanno un parser xml, ora che dovrebbe risolvere il tuo problema.$.parseXML(xml) http://api.jquery.com/jQuery.parseXML/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top