-1

データベースからフェッチしているユーザー入力をエンコードし、クリック時にテキストエリアに挿入しようとしています。これは、データをエンコードし、ユーザーをテキストエリア アンカーに送信し、関数をトリガーするコードです。

$quote = "[url]" . $quote . "[/url]";
$quote = htmlspecialchars($quote, ENT_QUOTES);
$quote = json_encode($quote, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo "
<a href='#quickpost' value='quote' 
onClick=\"quote(" . $quote . ")\" name='quote'>Quote</a>

quote() 関数は次のとおりです。

function quote(originalpost){
oFormObject = document.forms['id1'];
oFormObject.elements['post'].value = originalpost;
};

クリックすると、firebug で次のエラーが発生します: SyntaxError: syntax error Line 1

私は JavaScript に関してはまったくの初心者なので、まったく明らかなことを見落としている可能性があります。私はこれについて多くの異なるエンコーディングオプションと物事を調べて試しましたが、どこにも行きません.

4

3 に答える 3

3

JSON はネイティブの Javascript であるため、JS コードで宣言したり渡したりするときに、JSON を引用しないでください。

試す:

echo "
<a href='#quickpost' value='quote' 
onClick='quote($quote)' name='quote'>Quote</a>";

次に、関数内で、JSON を文字列化する必要がある場合があります。

oFormObject.elements['post'].value = JSON.stringify(originalpost);

健全性のために、によって生成された JSON のコピーを取得し、それをJSON lint ユーティリティjson_encodeで実行して、それが有効であることを確認してください。

それが機能するかどうかを確認してください。ネイティブの stringify サポートを持たないブラウザーの場合、関数のコードはこちらから取得できます。

于 2012-08-02T01:46:41.220 に答える
0

引用関数に文字列を送信していることを確認する必要があるかもしれません。私が見ているものについては、あなたが送信quote([url]...しているはずなのに送信している可能性がありますquote("[url]..."(引用文字に注意してください)

于 2012-08-02T01:46:21.230 に答える
0

データはデータベースからのものなので、json エンコードする前に配列として出力するだけです。

//array from database
$array = array();
//set the header
header("content-type:json/application");
return json_encode($array);

次に、エンコードされた json を responseText として取得します。

var data = $.ajax({
  url:"",
  type:"json",
  cache:false,
  async:false
}).responseText;

var encodedData = JSON.parse(data);

これで、encodedData である有効な json オブジェクトができました

于 2012-08-02T01:52:03.173 に答える