PHP AJAX XML
In this page:
header("Content-Type: text/xml");
$dom = new DOMDocument();
$root = $dom->createElement("root_name", "text");
$dom->appendChild($root);
echo $dom->saveXML();
एक PHP Endpoint से XML Return करना
एक AJAX endpoint JSON के बजाय एक XML document बना और return कर सकता है, इसे safely construct करने के लिए DOMDocument (DOM Parser topic में covered) इस्तेमाल करके, फिर इसे उपयुक्त text/xml content type header के साथ output करते हुए।
उदाहरण: Returning XML from a PHP Endpoint
<?php
// Call `header("Content-Type: text/xml")`
header("Content-Type: text/xml");
// Create a new `DOMDocument` instance, stored in `$dom`
$dom = new DOMDocument();
// Declare `$root`, set to `$dom->createElement("response", "success")`
$root = $dom->createElement("response", "success");
$dom->appendChild($root);
// Print `$dom->saveXML()` to the output
echo $dom->saveXML();
?>
Login to try C/C++/Java/PHP code in the editor
JavaScript में एक XML AJAX Response Parse करना
browser का built-in DOMParser एक raw XML response string को एक navigable document में parse कर सकता है, PHP के अपने DOM extension जैसे similar तरीके से -- response.text() raw XML text retrieve करता है, और new DOMParser().parseFromString() इसे एक queryable document में convert करता है।
उदाहरण: Parsing an XML AJAX Response in JavaScript
<?php
// JS: new DOMParser().parseFromString(await response.text(), "text/xml")
header("Content-Type: text/xml");
echo "<response>ok</response>";
?>
Login to try C/C++/Java/PHP code in the editor
Database Data से एक XML Response बनाना
किसी database query को XML output के साथ combine करना JSON case जैसा ही pattern follow करता है -- rows fetch करें, फिर DOMDocument इस्तेमाल करके हर एक के लिए एक XML element बनाएँ, हर row को response document के एक child element की तरह append करते हुए।
उदाहरण: Building an XML Response from Database Data
<?php
// Create a new `SQLite3` instance with ':memory:', stored in `$db`
$db = new SQLite3(':memory:');
$db->exec("CREATE TABLE products (name TEXT)");
$db->exec("INSERT INTO products VALUES ('Book')");
// Create a new `DOMDocument` instance, stored in `$dom`
$dom = new DOMDocument();
// Declare `$root`, set to `$dom->createElement("products")`
$root = $dom->createElement("products");
// Declare `$result`, set to `$db->query("SELECT * FROM products")`
$result = $db->query("SELECT * FROM products");
// Keep looping while `$row = $result->fetchArray(SQLITE3_ASSOC)` holds
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
// Declare `$item`, set to `$dom->createElement("product", $row['name'])`
$item = $dom->createElement("product", $row['name']);
$root->appendChild($item);
}
$dom->appendChild($root);
// Print `$dom->saveXML()` to the output
echo $dom->saveXML();
?>
Login to try C/C++/Java/PHP code in the editor
एक नए Endpoint के लिए XML और JSON में चुनना
बिना किसी मौजूदा constraint वाले बिल्कुल नए AJAX endpoint के लिए, JSON लगभग हमेशा simpler, ज़्यादा efficient choice है -- XML तक तभी जाएँ जब आप किसी ऐसे system के साथ integrate कर रहे हों जो पहले से XML उम्मीद करे या produce करे, default starting point की तरह नहीं।
उदाहरण: Choosing Between XML and JSON for a New Endpoint
<?php
// Print "Use JSON by default; XML only when integrating with a system that already expects it" to the output
echo "Use JSON by default; XML only when integrating with a system that already expects it";
?>
Login to try C/C++/Java/PHP code in the editor
एक XML Response Structure Validate करना
किसी AJAX endpoint के XML response को reliable मानने से पहले, यह confirm करना उचित है कि DOMDocument actually valid, well-formed XML produce करता है -- एक sanity check की तरह saveXML() output पर loadXML() call करना, या सीधे endpoint के URL के against test करके raw response inspect करना।
उदाहरण: Validating an XML Response Structure
<?php
// Create a new `DOMDocument` instance, stored in `$dom`
$dom = new DOMDocument();
// Declare `$root`, set to `$dom->createElement("response", "ok")`
$root = $dom->createElement("response", "ok");
$dom->appendChild($root);
// Declare `$xmlString`, set to `$dom->saveXML()`
$xmlString = $dom->saveXML();
// Create a new `DOMDocument` instance, stored in `$check`
$check = new DOMDocument();
// Declare `$isValid`, set to `$check->loadXML($xmlString)`
$isValid = $check->loadXML($xmlString);
// Print `$isValid ? "Well-formed XML" : "Invalid XML"` to the output
echo $isValid ? "Well-formed XML" : "Invalid XML";
?>
Login to try C/C++/Java/PHP code in the editor
- Content-Type: text/xml (या application/xml) response header set करना भूल जाना, जो browser या JavaScript XML parser को response misinterpret करवा सकता है।
- manually variable values के आसपास XML tags को strings की तरह concatenate करना, malformed XML का risk लेते हुए अगर किसी value में < या & जैसा character हो जिसे escaping चाहिए।
- same project के अलग-अलग endpoints में XML और JSON response formats को inconsistently mix करना, JavaScript को हर एक अलग तरह से handle करने पर मजबूर करते हुए।
- XML return करने वाले एक AJAX endpoint को Content-Type: text/xml header set करना चाहिए ताकि client response सही से interpret करे।
- XML response programmatically बनाने के लिए DOMDocument या SimpleXML इस्तेमाल किया जाना चाहिए, tag strings को manually concatenate करने के बजाय।
- JavaScript का fetch API response.text() और फिर DOMParser API से एक XML response retrieve और parse कर सकता है।
Chapter Quiz — Complete all 12 topics to unlock
0/12 topics done
Complete these topics first: