私の Yii Web サイトでは、jQuery ajax を使用して Amazon AWS サービスからデータを抽出しています。ajax レスポンス以外はすべて正常に動作します。私のコントローラー アクションでは、次のように Amazon からデータを取得します。
$jdata = $this->amazonProxyRequest();
その後、$jdata
必要なすべてのデータを含む連想配列の行が含まれます。
たとえば、最初の行を抽出し、それを ajax json 応答として「エコー」する必要があります。そうです:
$jt_data = CJSON::encode($jdata[0]);
変数には$jt_vata
現在有効な JSON が含まれており、デバッガーによると、貼り付けています。
"{"id":"1","author":"Leo Tolstoy","title":"War and Peace (Cambridge World Classics) Critical Edition (Annotated) (Complete Works of Leo Tolstoy \/ Complete Works of Leo Tolstoi)","publisher":"Cambridge World Classics","isbn":"","year_published":"2010-11-30"}"
ここまでは順調ですね。次に、私の見解では、このデータを使用したいと考えています。テスト目的で、'success' オプションをdata
指定して、メソッドに渡した変数でアラームを発生させます。
'onblur'=> CHtml::ajax(array(
'url'=>Yii::app()->createUrl('book/searchAmazon'),
'type'=>'post',
//'dataType'=>'json',
'data'=>array('title' => 'js:this.value'),
'success' => "js:function(data)
{
alert(data);
}",
'error' => "function(data, status){ alert(status); }",
))
コメントを外すと、 が表示され'dataType'=>'json'
ますがparsererror
、その理由はわかっています。関数のdata
変数にはJSON データが含まれていますが、前に追加された Amazon Web Service への非常に巨大な GET 要求文字列もあります。したがって、アラートを含むショーを表示しますsuccess
alert(data)
http://ecs.amazonaws.com/onca/xml?AWSAccessKeyId=MyAccessKey&AssoSignature=
... etc ...
DrJzWb73c08V5yffKUkFOu63Y4w%2FtIEc%2FtlVVjBKrUY%3D{"id":"1","author":
"Leo Tolstoy","title":"War and Peace (Cambridge World Classics)
Critical Edition (Annotated) (Complete Works of Leo Tolstoy \/ Complete Works of Leo
Tolstoi)","publisher":"Cambridge World Classics","isbn":"","year_published":
"2010-11- 30"}
しなくても
echo CJSON::encode($jdata[0]);
コントローラーでは、アラームで GET 文字列を引き続き取得しますが、JSON は追加されません。長い文字列を取り除く唯一の方法は、コメントすることです
$jdata = $this->amazonProxyRequest();
もちろん、これは受け入れられません。
質問:
このリンクの由来を教えていただければ幸いです。
私は自分でこれを理解しようとしましたが、成功しませんでした。