Edit: Ich habe zwei Dinge hier fehlen. Das Fehlen von "Content-Type: text/xml" in der vom AJAX-Aufruf zurückgegebenen Kopfzeile verhinderte, dass JQuery die zurückgegebenen Daten als Dokument behandelte. Sobald dies korrekt gehandhabt wurde, wurde dieser Code korrekt analysiert und nur der Index und der Projektname ausgegeben.Parsing XML mit CDATA mit JQuery
$("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ß mit der FogBugz API und JQuery zusammen zu fassen, was ich denke, wird ein kühles kleines Werkzeug sein, aber ich bin in eine JQuery Begrenzung läuft. CDATA-Tags scheinen es zu verwirren.
Hier ist der Code, den ich mit:
$("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[[email protected]]]></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[[email protected]]]></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 auf JQuery nativen ist verwirft den Inhalt CDATA-Elemente. FogBugz setzt die meisten unserer String-Daten in CDATA-Tags, da wir an den meisten Stellen Sonderzeichen und Interpunktionszeichen zulassen. Wenn wir die Ausgabe in CDATA-Tags einschließen, können wir relativ sicher sein, dass wir gültige Daten über unsere API zurücksenden. PHP-Parsing der XML funktioniert gut. Meine Online-Recherche bringt ein paar Leute dazu, sich darüber zu beschweren, aber nicht viel Arbeit zu erledigen. Mit der Erweiterbarkeit von JQuery würde ich denken, dass da draußen etwas ist. Hat jemand anderes dies erreicht?
Die Dinge haben sich geändert, bitte aktualisieren Sie Ihre Antwort. http://api.jquery.com/jQuery.parseXML/ – CharlesTWall3