我在jQuery脚本中调用了AJAX请求。我在其中创建了控制器(AjaxController)和方法actionRequest。 JQuery发送此请求:
jQuery.ajax({
url: location.origin + '/web/index.php?r=ajax/request',
async: false,
type: 'POST',
data: {'param': 32},
dataType: 'json',
success: function(data) {result = data}
});
并且此代码位于控制器的脚本中:
public function actionRequest() {
$param = Yii::$app->request->post('param');
echo json_encode($param);
}
Controller已接受此选项并将其发回。 JavaScript在" alert()"的帮助下显示此选项(结果)。如果我使用GET方法发送它,那么一切正常并且窗口显示" 32"。但是如果我将此请求更改为" POST",则窗口显示" undefined"。如果我发送请求到我的PHP脚本(路径:/ web / php),那么一切也正常。如果我将删除控制器中的所有代码并仅保留:
<?php
$param = $_POST['param'];
echo json_encode($param);
?>
直接询问脚本,然后一切正常......
当我使用AJAX方法POST时,有一些迹象表明错误在框架中。因为如果我在控制器中编写这段代码:
$root = $_SERVER['DOCUMENT_ROOT'];
$file = fopen($root . '/text.txt', 'w');
fwrite($file, '1');
fclose($file);
然后我发送GET请求,代码完成并在站点的根目录中创建文件。但是如果我将请求更改为POST,则不会创建文件。
我的控制器来源:
<?php
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;
use yii\helpers\Html;
class AjaxController extends Controller {
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout'],
'rules' => [
[
'actions' => ['logout'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
public function actionIndex() {
return '';
}
public function actionRequest() {
$param = Yii::$app->request->post('param');
echo json_encode($param);
}
}
?>
我的UrlManager:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'suffix' => '/',
'rules' => [
'' => 'site/index',
'register' => 'site/register'
]
]
答案 0 :(得分:0)
根据您的UrlManager设置,尝试将您的ajax网址更改为此。
url: location.origin + '/ajax/request/',
只需附加控制器名称,操作名称和尾随斜杠。
原因是
enablePrettyUrl
设置为true
showScriptName
至false
suffix
至/
我对此进行了测试,它适用于GET
和POST
类型。
请记住更改功能以相应地获取GET
和POST
param。