我正在尝试使用 yii 进行简单的 ajax 调用,而不是使用本机 yii 方式。我的目标是使用创建操作中的数据库查找来填充来自邮政编码字段的输入的州和城市字段。我有一个单独的 javascript 文件,
$('#Accounts_zip').bind('focusout',function(){
$.ajax({
type: 'POST',
url:'/gatesadmin/index.php?r=Accounts/Ziplookup',
data: {zip:$('#Accounts_zip').val()},
success: function(datain, textStatus, jqXHR) {alert(datain.statecode);} ,
error: function(jqxhr, textStatus, errorthrown){alert(errorthrown);},
dataType:JSON
});
alert($('#Accounts_zip').val());
});
and in my AccountsController I have:
public function actionZiplookup()
{
$z = new ZipDao();
$row = $z->GetCityStateByZip($_REQUEST['data']);
header('Content-Type: application/json; charset="UTF-8"');
echo CJSON::encode(array('output'=>$row));
}
and my form is out of the box generated CRUD:
...
<div class="row">
<?php echo $form->labelEx($model,'zip'); ?>
<?php echo $form->textField($model,'zip',array('size'=>10,'maxlength'=>10)); ?>
<?php echo $form->error($model,'zip'); ?>
</div>
...
我知道 javascript 正在工作,因为我收到了警报,如果我直接调用 URL,yii 会触发 actionZiplookup 事件,因为我得到了返回的 json。我似乎无法让表单成功调用 ajax,因为我在 jquery ajax 失败事件中收到外部服务器错误。我已经梳理了网络和最接近的示例,我可以找到将 javascript 嵌入表单本身并使用 Yii::app()-createUrl() 方法来定义 url,但必须有一种方法来获取控制器将 javascript 代码保存在单独的文件中时触发的操作。
任何帮助将不胜感激。