带有ajax的Yii2中的Route和Post参数 - javascript

我在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);
}

控制器已接受此选项并发回。 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'
    ]
]

参考方案

根据您的UrlManager设置,尝试将您的Ajax网址改为该网址。

url: location.origin + '/ajax/request/',

只需添加控制器名称,操作名称和尾随正斜杠即可。

原因是

您将enablePrettyUrl设置为true
showScriptNamefalse
suffix/

我已经对此进行了测试,它适用于GETPOST类型。

只需记住更改函数即可相应地获取GETPOST参数。

如果我得到url(''),我该如何使用另一个URL - javascript

我是新手,正在写这篇文章,但是如果源上没有图像,那么我只有空白。有人可以告诉我,如果我正在获取背景图像,如何获取/images/no-image.jpg:url();这是我的代码:<div class="uk-clearfix uk-position-relative"> <div class="recipeb…

提交初始化后删除某些帖子数据 - javascript

在初始化提交之后但在将数据发送到处理页面之前,是否可以过滤$ _POST表单数据?我想象过程的方式:提交->收集$ _POST数据->发送数据我想做的事:提交->收集$ _POST数据->删除某些元素->发送数据这样就不必更改处理页面以过滤掉不希望接收的元素了吗? javascript大神给出的解决方案 当然可以,您可以在JS …

粗糙的Unicode->没有CLDR的语言代码? - javascript

我在写字典应用。如果用户键入Unicode字符,我想检查该字符是哪种语言。例如字 - returns ['zh', 'ja', 'ko'] العربية - returns ['ar'] a - returns ['en', 'fr', …

对ID为'abc%'的dom执行操作 - javascript

我想对ID为'abc%'的DOM进行一些操作<a id='abc1'></a> <a id='abc2'></a> <a id='abc3'></a> <a id='abc4'></a>…

Jsonp没有出现``访问控制允许来源''错误 - javascript

在我的PHP中,我喜欢这样来回显jsonp类型的“ json数据”echo $_GET['callback'] . '('.json_encode($arr).')'; 在我的js(angularjs)中,$http.get('http://example.com/app/?callbac…