XML形式のテーブルから製品のリストを返すphpスクリプトへのAjax呼び出しによって入力されている選択メニューがあります。
製品テーブルには約400のレコードがあり、何らかの理由で、選択メニューにはすべてを返すselectステートメントで何も表示されません。Firebugのトラブルシューティングでは、phpコードがすべての400レコードをブラウザに正しく返しているのに、表示されないことがわかります。
selectステートメントを「SELECTProductID、ProductName FROM product WHERE ProductID <74」に変更すると、最初の73個のアイテムが表示されて機能します。これはアイテム74の問題が原因である可能性があると考えて、where句を "> 74"に変更しましたが、これでも何も返されませんでした。ただし、「>74および<120」のwhere句は機能します。
何が原因でしょうか?以下のコードスニペットを見つけてください。
コードのJavaScriptは次のとおりです。
function populateProducts(xmlindata) {
var mySelect = $('#ili_product');
$(xmlindata).find("Product").each(function()
{
optionValue=$(this).find("id").text();
optionText = $(this).find("name").text();
mySelect.append($('<option></option>').val(optionValue).html(optionText));
});
}
phpコードは次のとおりです。
<?php
include("dbconfig.inc.php");
header("Content-type: text/xml");
echo "<?xml version=\"1.0\" ?>\n";
echo "<products>\n";
$select = "SELECT ProductID,ProductName FROM product";
try {
foreach($dbh->query($select) as $row) {
echo "<Product>\n\t<id>".$row['ProductID']."</id>\n\t<name>".$row['ProductName']."</name>\n</Product>\n";
}
}
catch(PDOException $e) {
echo $e->getMessage();
die();
}
echo "</products>";
?>