我有一个选择菜单,该菜单由对php脚本的Ajax调用填充,该脚本以XML格式返回表中的产品列表。
产品表有大约400条记录,由于某种原因,选择菜单不会显示任何返回全部的select语句。使用Firebug进行故障排除,我可以看到php代码正确地将所有400条记录正确地返回给浏览器,但它没有显示出来。
当我将select语句改为“SELECT ProductID,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>";
?>
答案 0 :(得分:0)
也可能是因为您的退回数据中的某些非法字符未正确转义..
检查console.log($(xmlindata))是否返回所有数据。特别检查值中可能包含“或'等字符的值可能会破坏你的字符串
答案 1 :(得分:0)
在基于xml / json数据生成/形成html时转义引号和其他字符是一个好习惯
在你的情况下,
optionValue=$(this).find("id").text().replace('\'','"');
或replace("'", "’");
这样你就可以逃避引用,如果它们是造成问题的引号。不确定问题是否是由于字符串断开造成的。
你可以像这样逃避多个角色。
.replace(/&/g, "&").replace(/'/g, """)
;
注意//
正则表达式和g
标志,这将在全局范围内找到这些字符。