在我的 Yii 网站中,我使用 jQuery ajax 从 Amazon AWS 服务中提取一些数据。除了 ajax 响应外,一切正常。在我的控制器操作中,我从亚马逊获取数据,如下所示:
$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"}"
到目前为止,一切都很好。然后在我看来,我想使用这些数据。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 数据,但之前附加的亚马逊网络服务还有一个非常巨大的 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();
这当然是不可接受的。
问题:
如果您告诉我此链接来自哪里,我将不胜感激?
我试图自己解决这个问题,但我没有成功。