1

我有一个选择菜单,通过 Ajax 调用填充一个 php 脚本,该脚本从 XML 形式的表中返回产品列表。

产品表有大约 400 条记录,出于某种原因,选择菜单没有显示任何内容,而选择语句则返回全部。使用 Firebug 进行故障排除,我可以看到 php 代码成功地将所有 400 条记录正确返回到浏览器,但它没有显示。

当我将选择语句更改为“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>";
?>
4

2 回答 2

0

在基于 xml/json 数据生成/形成 html 时转义引号和其他字符是一个好习惯

在你的情况下,

optionValue=$(this).find("id").text().replace('\'','&quot;');

或者replace("'", "&rsquo;");

这样你就可以转义引号,如果它们是导致问题的原因。不确定问题是否是由于琴弦断裂造成的。

你可以像这样转义多个字符。

.replace(/&/g, "&amp;").replace(/'/g, "&quot;");

注意//正则表达式和g标志,这将全局查找字符。

于 2012-10-08T21:40:11.483 回答
0

这也可能是因为您返回的数据中的一些非法字符没有正确转义..

检查console.log($(xmlindata)) 是否返回所有数据.. 特别是检查在可能破坏字符串的值中可能包含"'等字符的值

于 2012-10-08T21:26:39.773 回答