1

私の 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 要求文字列もあります。したがって、アラートを含むショーを表示しますsuccessalert(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();

もちろん、これは受け入れられません。

質問:

このリンクの由来を教えていただければ幸いです。

私は自分でこれを理解しようとしましたが、成功しませんでした。

4

0 に答える 0