先贴下我的代码:
signup.js
$('.reg_verify_pic').click(function(){ var csrfToken = $('meta[name="_csrf-Token"]').attr("content"); var mobileNum = $('#signupform-mobile').val(); console.log(mobileNum); $.ajax({ url:"index.php?r=sms/sms", type:"POST", data:{phone:mobileNum,_csrf:csrfToken}, dataType:"json", success:function(data){ console.log(data); }, error:function(er){ console.log('错误'); } })
SmsController
public $enableCsrfValidation = false ;
public function actionSms() { if(Yii::$app->request->isAjax) { $data = Yii::$app->request->post(); $phone= explode(":", $data['phone']); $phone = $phone[0]; }
$code = rand(100000,999999); $c = new TopClient; $c->appkey = 'XXXXXXXX'; $c->secretKey = 'XXXXXXXXXXXXXXXXXXXX'; $req = new AlibabaAliqinFcSmsNumSendRequest; $req->setExtend(""); $req->setSmsType("normal"); $req->setSmsFreeSignName("XXXX"); $req->setSmsParam("{ "code":"$code",product:'XX'}"); $req->setRecNum($phone); $req->setSmsTemplateCode("SMS_XXXXXXX"); $resp = $c->execute($req); //var_dump($resp); if($resp){ return json_encode($resp); } }
Yii2可以跟Ajax协作轻松完成我们想要的任何效果。但是,对于使用不熟练的开发者仍然会遇到很多问题。
FIRST,400错误:出现的原因在于csrf问题。
解决办法:1,2,3作用等同,只采用一种即可。
1、接口的控制器中添加:
public $enableCsrfValidation = false ;
2、接口的控制器中添加:
public function beforeAction($action){
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
3、接口的控制器中添加:
public function init{
$this->enableCsrfValidation = false;
}
扩展:
1、frontend或者backend局部开启
在前台或者后台的配置main.php文件中:
request => [
'enableCookieValidation' => false,
]
2、全局开启
在common/config/main.php
request => [
'enableCookieValidation' => false,
]
按照上面的方法,配置完成之后出现了500错误,怎么办?看出错信息啊!!!任何问题解决关键都在于找到问题的原因和位置。