1

退屈なコードを読む必要はありませんが、何が起こっているのかを簡単に要約しましょう。ドキュメントが読み込まれると、XHR リクエストが jQuery ポスト関数を介して送信されます。post は、別の php ファイルを呼び出していくつかの文字列を処理し、それを返す PHP ファイルに POST ヘッダーを送信します。最後に、エコーされた json_encode 関数が文字列を jQuery post 関数に返し、jQuery はそれを DOM に操作します。

JavaScript のポスト関数によって返される結果は次のとおりです。

<option value="\&quot;auto2\&quot;">auto2&lt;\/option&gt;</option>

それらすべてのエスケープ文字を参照してください。echo関数を使用する代わりに、PHP 側で結果をエコーするだけで、次のjson_encodeように返されます。

<option value="auto">auto</option>

他の特殊文字なし。これが望まれることです。私の質問は、これを使用しても大丈夫ですか? そして、なぜjson_encode特殊文字を追加するのですか? json_encode他の文字を返さずに使用する方法はありますか?

編集

JS

    $(document).ready(function() {
    var PROCESSOR_FILE = "http://address/include/processor.php";

    $.post(PROCESSOR_FILE, {"task": "verticalSelect"}, function(data) {
        $("#verticalSelect").html(data);
    });
});

PHP

$IMEXporterpath = dirname(__FILE__);
$IMEXporterFile = $IMEXporterpath . "/IMEXporter.class.php";

if (isset($_REQUEST["task"]))
    $task   = $_REQUEST["task"];
else
    $task   = "";


    require_once $IMEXporterFile;
    $IMEXp = new IMEXp();

    $result = $IMEXp->returnHtml($task);
    echo json_encode($result);

もっと PHP

public function returnHtml($element) {
        return $this->returnHtml_HTML($element);
    }


    private function returnHtml_HTML($element) {
        if($element == "verticalSelect") {

            $dbTables   = $this->get_Tables();
            $nbTable    = count($dbTables);

            for ($a = 0; $a < $nbTable; $a++) {
                    $ZHTML  .=  '<option value="'.$dbTables[$a].'">'.$dbTables[$a].'</option>';
            }
        }
        return $ZHTML;
    }
4

2 に答える 2

0

PHP 5.3.13 の場合:

header("Content-Type: text/plain"); // to make sure browser displays raw html
$str = '<option value="auto">auto</option>';

echo json_encode($str);
echo "\n";
echo $str;

出力

"<option value=\"auto\">auto<\/option>"
<option value="auto">auto</option>

ここには変換された特殊文字はありません。

$.post('test.php').done(function(text){
  return console.log(text);
});

同じものをコンソールに出力します。

AJAX がないと json_encode($str) が表示されます&quot;か?

于 2012-08-30T23:53:49.923 に答える
0

コードを見ないと何が起こっているのかわかりにくく、あなたの質問が理解できなかったのかもしれません。私の経験では、すべてを UTF-8 にするのが最善です。正確には思い出せませんが、状況によっては UTF-8 が AJAX のデフォルトになっています。あいまいで申し訳ありませんが、UTF-8 を使用していない場合、適切な回避策はないようです。

つまり、データベース内のすべてのテーブルを UTF-8 に変更し、すべてのファイルを UTF-8 形式で保存し (私は TextPad を使用して形式を変更します)、すべての HTML ページを UTF-8 に指定する必要があります。

私はアクセントのある文字がたくさんあるポルトガル語でサイトを開発しているので、その不快な経験をしなければなりませんでした。以前は ISO-8859-1 を使用しようとしましたが、AJAX をさらに使用した後、UTF-8 が実際に唯一の実行可能なオプションであることがわかりました。

于 2012-08-30T23:50:43.783 に答える