Frage

Edit: Ich fehlte hier zwei Dinge. Der Mangel an „Content-Type: text / xml“ in der Kopfzeile von dem Ajax-Aufruf zurückgegeben wurde verhindert JQuery von den zurückgegebenen Daten als Dokument zu behandeln. Sobald das korrekt behandelt wurde, analysiert dieser Code korrekt und Ausgabe nur der Index und Projektnamen ein.

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

Original : Ich habe Spaß, die FogBugz API und JQuery zusammen zu stellen, was ich denke, wird ein kühles kleines Werkzeug sein, aber ich bin in eine JQuery Begrenzung läuft. CDATA-Tags scheinen sie zu verwirren.

Hier ist der Code verwende ich:

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

    });
  });

Und hier ist die Ausgabe erhalte ich:

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

Es scheint, dass die XML-Analyse, die JQuery verwirft den Inhalt von CDATA Elemente nativen ist. FogBugz setzt die meisten unserer String-Daten in CDATA-Tags, weil wir Sonderzeichen und Zeichensetzung in den meisten Orten zu ermöglichen. Umschließenden die Ausgabe in CDATA-Tags ermöglicht es uns relativ sicher sein, dass wir gültige Daten über unsere API sind zurückschicken. PHP Parsen von XML funktioniert gut. Meine Online-Forschung liefert ein paar Leute darüber beschweren, aber nicht viel Arbeit getan. Mit JQuery Erweiterbarkeit, würde ich denken, dass etwas gibt es da draußen. Hat jemand anderes dies erreicht?

War es hilfreich?

Lösung

  

Es scheint, dass die XML-Analyse, die auf JQuery

nativer ist

Es gibt keine XML-Analyse stammt aus jQuery. Es verwendet nur die Standard-XMLHttpRequest.responseXML Eigenschaft einen XML-DOM für die Antwort zu erhalten.

  

verwirft den Inhalt von CDATA Elemente

Was Content-Type senden Sie die Antwort mit? Weil ich es nicht werden als XML analysiert überhaupt vermuten. In diesem Fall werden Sie jQuery eine Zeichenfolge des Dokuments werden vorbei zurück, anstelle eines XML-DOM.

Wenn Sie dann „$ (xml)“ nennen, wird es Dokumentinhalt von dieser Zeichenfolge erschaffen (*) - analysiert als HTML, nicht XML. In HTML gibt es nicht so etwas wie einen CDATA-Abschnitt, so Browser verwerfen könnte, oder behandelt sie als Kommentare.

Ich vermute, dies, weil „project.html ()“ nicht wirklich funktionieren, wenn das Dokument XML. ‚Html ()‘ nur wieder das gleiche wie der Standard ‚innerHTML-‘ Eigenschaft (**), das nur für HTML-Dokumente arbeitet; es wird auf XML-Elemente nicht definiert.

  

Enclosing die Ausgabe in CDATA-Tags ermöglicht es uns relativ sicher sein, dass wir gültige Daten über unsere API sind zurückschicken.

Nun, ‚relativ‘: Wenn Ihre Daten „]]>“ enthalten geschieht verlieren Sie immer noch.

(*. Ich habe nie verstanden, wenn jQuery das Bedürfnis verspürt, Dokumentfragment Erstellung und CSS-Auswahl in die gleiche Funktion zerquetschen Sie sind völlig andere Operationen, die Sie nicht wollen, zu verwirren, wie sie hier geschehen kann. )

(**:. Eigentlich ist es versucht, benutzerdefinierte herauszufiltern jQuery Attribute zunächst eine regex Leider da regex nicht HTML analysieren kann, wird er glücklich gültig Teile des Textes herausfiltern, die wie HTML aussehen passieren Attribute Whoops.. Keiner von jQuery schöneren Teile).

Andere Tipps

jquery hat in der Tat einen XML-Parser hat jetzt das sollte Ihr Problem lösen.     $ .ParseXML (xml) http://api.jquery.com/jQuery.parseXML/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top