Chỉnh sửa: Tôi đã bỏ lỡ hai điều ở đây. Việc thiếu "Content-Type: text/xml" trong tiêu đề được trả về bởi cuộc gọi AJAX đã ngăn JQuery xử lý dữ liệu được trả về dưới dạng tài liệu. Khi đã được xử lý chính xác, mã này được phân tích cú pháp chính xác và chỉ xuất ra chỉ mục và tên dự án.Phân tích cú pháp XML bằng CDATA với 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);
});
});
gốc: Tôi đang gặp vui vẻ bằng cách sử dụng FogBugz API và JQuery để đặt lại với nhau những gì tôi nghĩ sẽ là một công cụ nhỏ mát mẻ, nhưng tôi chạy vào một giới hạn JQuery. Các thẻ CDATA dường như gây nhầm lẫn.
Dưới đây là đoạn code tôi đang sử dụng:
$("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);
});
});
Và đây là kết quả tôi nhận được:
<?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>
Có vẻ như rằng phân tích cú pháp XML đó là có nguồn gốc từ JQuery loại bỏ các nội dung của Các phần tử CDATA. FogBugz đặt hầu hết dữ liệu chuỗi của chúng tôi trong các thẻ CDATA vì chúng tôi cho phép các ký tự đặc biệt và dấu câu ở hầu hết các địa điểm. Việc đưa đầu ra vào các thẻ CDATA cho phép chúng ta yên tâm tương đối rằng chúng tôi đang gửi lại dữ liệu hợp lệ qua API của chúng tôi. Phân tích cú pháp PHP của XML hoạt động tốt. Nghiên cứu trực tuyến của tôi mang lại một vài người phàn nàn về điều này, nhưng không có nhiều việc phải làm. Với khả năng mở rộng của JQuery, tôi nghĩ rằng có điều gì đó ngoài kia. Có ai khác hoàn thành việc này không?
Mọi thứ đã thay đổi, vui lòng cập nhật câu trả lời của bạn. http://api.jquery.com/jQuery.parseXML/ – CharlesTWall3