编辑: 我失去了两样东西在这里。缺乏"Content-Type:text/xml"在头返回的阿贾克斯的电话是防止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);
  });
});

原始的:我很开心使用的 FogBugz API 九放在一起什么我认为将是一个很酷的小工具,但我跑进一个JQuery的限制。CDATA标似乎混淆。

这里的代码,我在使用:

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

    });
  });

和这里的输出,我获得:

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

这似乎是XML分析这就是原产于JQuery丢弃的内容CDATA要素。FogBugz把我们的大多数串中的数据CDATA标签,因为我们允许特殊字符和标点符号在大多数地方。包围的输出CDATA标签允许我们休息比较放心,我们会送回的有效数据,通过我们的API。PHP分析XML。我在网上的研究产生的几个人抱怨这一点,但是不多的工作得到完成。有文化的扩展,我认为有东西在那里。有其他人来完成这个吗?

有帮助吗?

解决方案

这似乎是XML分析这就是原产于JQuery

没有XML分析当地的!它只是使用的标准程序.responseXML财产得到DOM XML为响应。

丢弃的内容CDATA元素

什么内容的类型你发送回应?因为我怀疑这是不是正在分析为XML。在这种情况下jQuery会通过你背一串的文件,而不是一种XML DOM。

然后当你呼叫"$(xml)",将创建文件的内容,string(*)分析作为HTML, XML。在HTML没有这样的东西作为一个CDATA部分,因此浏览器可能会丢弃它们,或把他们当作评论。

我怀疑这是因为"project.html()"不实际的工作时,该文件是XML。'html()'刚刚返回的相同标准的'innerHTML的财产(**),其中只有作为HTML文件;它是不确定的在XML要素。

包围的输出CDATA标签允许我们休息比较放心,我们会送回的有效数据,通过我们的API。

好,'相对':如果你的数据,发生在含有"]]>"你还是输了。机器生成的XML真的应该只有使用实体编码的正常方式。通常的服务器应用程序应使用适当的XML工具产生的响应,在这种情况下,这将是自动完成的。

(*:我从来没有理解当jQuery觉得有必要压扁的文件片段创建和CSS的选择进入的同样的功能。他们是完全不同的操作,你不想搞混,因为可能发生在这里.)

(**:实际上,它尝试筛选出的jQuery定的属性,第一,使用regex.不幸的是,由于regex无法分析HTML,它将幸福地过滤出有效的部分案文发生看起来像HTML的属性。哎呦.没有一个最初的更漂亮的部分。)

其他提示

jquery事实上确实有一个xml parser现在应该解决你的问题。$.parseXML(xml) http://api.jquery.com/jQuery.parseXML/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top