Yani bir JavaScript XML veritabanı içeriğini sunmak için PHP + MySQL kullanıyorum.
$xml = "<?xml version='1.0' encoding='utf-8'?><confessions><pending>";
$pending = $m->MySqlHandler->Query("SELECT id, gender, age, confession, date_posted FROM confessions WHERE publish = 0");
foreach ($pending->Rows as $pr)
{
list($id, $gender, $age, $confession, $dateposted) = array(
$pr->Columns["id"]->Value,
$pr->Columns["gender"]->Value,
$pr->Columns["age"]->Value,
$pr->Columns["confession"]->Value,
$pr->Columns["date_posted"]->Value
);
$xml .= "<confession id='$id' gender='$gender' age='$age' dateposted='$dateposted'>$confession</confession>";
}
$xml .= "</pending>";
$xml .= "<active>";
$active = $m->MySqlHandler->Query(
"SELECT DISTINCT confessions.*,
(SELECT COUNT(*) FROM comments WHERE confession_id = confessions.id) AS comments,
(SELECT COUNT(*) FROM sentences WHERE confession_id = confessions.id) AS sentences
FROM confessions WHERE confessions.publish = 1"
);
foreach ($active->Rows as $ar)
{
list($id, $gender, $age, $confession, $dateposted, $absolutions) = array(
$ar->Columns["id"]->Value,
$ar->Columns["gender"]->Value,
$ar->Columns["age"]->Value,
$ar->Columns["confession"]->Value,
$ar->Columns["dateposted"]->Value,
$ar->Columns["absolutions"]->Value
);
$sql_template = "SELECT COUNT(*) FROM sentences WHERE confession_id = $id AND degree = '%s'";
$sentence_data = array(
"t" => mysql_result(mysql_query(sprintf($sql_template, "t")), 0, 0),
"c" => mysql_result(mysql_query(sprintf($sql_template, "c")), 0, 0),
"p" => mysql_result(mysql_query(sprintf($sql_template, "p")), 0, 0),
"l" => mysql_result(mysql_query(sprintf($sql_template, "l")), 0, 0)
);
$xml .= "<confession absolutions='$absolutions' t='{$sentence_data['t']}' "
. "c='{$sentence_data['c']}' p='{$sentence_data['p']}' "
. "l='{$sentence_data['l']}' id='$id' gender='$gender' "
. "age='$age'>$confession</confession>";
}
$xml .= "";
header("Content-Type: application/xml");
echo $xml;
Yani, oradan, sen gibi bir sonuç elde ...
<?xml version='1.0' encoding='utf-8'?>
<confessions>
<pending>
<confession id="1" gender="m" age="20" dateposted="2010-02-06 05:22:57">
Confesando.
</confession>
</pending>
<active>
<confession absolutions="0" t="0" c="0" p="0" l="0" id="2" gender="m" age="18">
Confesion.
</confession>
</active>
</confessions>
Ben kullanarak JavaScript ile XML yüklemek:
function sendData(params, to, oncomplete)
{
if (typeof oncomplete == 'undefined')
{
oncomplete = function() {};
}
if (typeof window.ActiveXObject != 'undefined' ) {
http = new ActiveXObject("Microsoft.XMLHTTP");
http.onreadystatechange = oncomplete;
} else {
http = new XMLHttpRequest();
http.onload = oncomplete;
}
http.open("POST", to, false);
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-Length", params.length);
http.setRequestHeader("Connection", "close");
http.send(params);
}
... Ki böyle denir:
// Load approval-pending data //
sendData("", "./leer/confesiones/" + sId, function()
{
var xml = http.responseXML;
var pending = xml.getElementsByTagName("pending").getElementsByTagName("confession");
(...)
Ben burada duracağım. Ben XML ayrıştırmak denediğimde Firebug'deki aşağıdaki hatayı alıyorum, çünkü:
XML Parsing Error: no element found Location: moz-nullprincipal:{7e9eab45-2f73-476d-9bdb-2370d1534f29} Line Number 1, Column 1:
^
Ben tarayıcı içine bir URL olarak girerek ./leer/confesiones/
yükleme denedim ve bir cazibe gibi çalışır. Tamamen geçerli XML. "Net" altında xhr incelemek için Firebug kullanarak bu yüzden de, geçerli XML diyor. Konsol görünümü, bir JavaScript hatası olup olmadığını gibi, bana hata veriyor biridir. Ancak, http.responseText
metinde, XML içerir ve xml
tiptedir [object XMLDocument]
.
Yani ... ne eksik?
SOLVED: düzgün ayrıştırmak için çıktı JSON ve JavaScript modifiye PHP.