1

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>";
?>
4

2 に答える 2

0

また、返されたデータの一部の不正な文字が適切にエスケープされなかったことが原因である可能性もあります。

console.log($(xmlindata))がすべてのデータを返すかどうかを確認します..特に、文字列を壊す可能性のある値の中に「」「 」などの文字が含まれている可能性がある値を確認します

于 2012-10-08T21:26:39.773 に答える
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 に答える