热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Yii2获取Ajax调用的错误请求(#400)-Gettingbadrequest(#400)onAjaxcallsusingYii2

Thisismycode:这是我的代码:$(document).on(change,#tblhotel-int_zone_id,function(e){varzon

This is my code:

这是我的代码:

$(document).on('change', '#tblhotel-int_zone_id', function(e){
    var zOneId= $(this).val();
    var form_data = {
        zone: zoneId
    };
    $.ajax({
        url: "state",
        type: "POST",
        data: form_data,
        success: function(response)
        {
            alert(response);
        }
    });
});

This shows:

这表明:

Bad Request (#400): Unable to verify your data submission.

错误请求(#400):无法验证数据提交。

And I already have . How can I fix this problem?

我已经有 。我如何解决这个问题?

7 个解决方案

#1


35  

You have a problem with enableCsrfValidation. To read more about it you can read here.

在enableCsrfValidation上有问题。要了解更多,请阅读这里。

To disable CSRF, add this code to your controller:

要禁用CSRF,请将此代码添加到控制器:

public function beforeAction($action) {
    $this->enableCsrfValidation = false;
    return parent::beforeAction($action);
}

This will disable for all actions. You should probably, depending on the $action, disable it only for specific actions.

这将禁用所有操作。根据$action,您可能应该只针对特定的操作禁用它。

Note: See the answer from Skullcrasher to do this in a more proper way.

注意:看看Skullcrasher给出的答案,以一种更合适的方式来做这件事。

#2


26  

As the answer from Mihai P. states, your problem is CSRF validation. It is also true that you could disable the validation for your actions, but this is not considered a good solution.

正如Mihai p的回答,您的问题是CSRF验证。同样,您可以禁用操作的验证,但这并不是一个好的解决方案。

As you have a problem in your Ajax request with the validation, you could also use a Yii Javascript function to add the CSRF token to your formdata that you send in the Ajax request.

由于在Ajax请求中有一个验证问题,您还可以使用Yii Javascript函数将CSRF令牌添加到您在Ajax请求中发送的formdata中。

Just try to add the token to your form data as follows:

请尝试将令牌添加到您的表单数据中,如下所示:

var form_data = {
    zone: zoneId,
    _csrf: yii.getCsrfToken()
};

I hope this helps and you therefore don't have to disable CSRF validation.

我希望这能有所帮助,因此您不必禁用CSRF验证。

In addition to manually add the CSRF token you can check if there is an X-CSRF header set in the request.

除了手动添加CSRF令牌之外,还可以检查请求中是否设置了X-CSRF头。

#3


7  

Add this code at the bottom of your layout:

在布局底部添加以下代码:


#4


4  

Use:

使用:

var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
    url: 'request',
    type: 'post',
    dataType: 'json',
    data: {param1: param1, _csrf : csrfToken},
});

More detail: Yii2: Using csrf token

更详细的:Yii2:使用csrf令牌。

#5


2  

You need to disable CSRF validation in the before action function:

您需要在前操作函数中禁用CSRF验证:

public function beforeAction($action) {
    if($action->id == "action name need to disable")
        $this->enableCsrfValidation = false;
    return parent::beforeAction($action);
}

Or using the GET method.

或者使用GET方法。

#6


1  

This works. Change the csrfParam with your own in Config/main.php

这个作品。用自己的配置/main.php修改csrfParam

'components' => [
    'request'=>[
        'csrfParam'=>"othername"
    ],
    ...

Remember that you must include in your requests the token with the same name as you defined in config.

记住,必须在请求中包含与配置中定义的名称相同的令牌。

#7


0  

/backend/config/main-local.php

/后端/ config / main-local.php

'components' => [
    'request' => [
        'COOKIEValidationKey' => 'unique code',
        'csrfCOOKIE' => ['httpOnly' => true, 'path' => '/admin/'],
    ],
],

/frontend/config/main-local.php

/前端/ config / main-local.php

'components' => [
    'request' => [
        'COOKIEValidationKey' => 'unique code',
        'csrfCOOKIE' => ['httpOnly' => true, 'path' => '/'],
    ],
],

推荐阅读
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 《精通 jQuery》第六章:深入解析与实战应用
    《精通 jQuery》第六章:深入解析与实战应用本章详细探讨了 Ajax 技术的核心机制及其实际应用。Ajax 通过 XMLHttpRequest 对象实现客户端与服务器之间的异步数据交换,从而在不重新加载整个页面的情况下更新部分内容。这种技术不仅提升了用户体验,还提高了应用的响应速度和效率。此外,本章还介绍了如何利用 jQuery 简化 Ajax 操作,并提供了多个实战案例,帮助读者更好地理解和掌握这一重要技术。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 本文详细探讨了Struts框架中几种常用的数据标签,包括`s:property`、`s:a`、`s:debug`、`s:include`和`s:param`。这些标签在实际开发中的应用广泛,不仅用于数据展示和链接生成,还提供了调试和模块化功能。文章分析了每个标签的基本用法及其属性配置,并结合具体示例介绍了如何进行性能优化和最佳实践。通过这些内容,开发者可以更好地理解和利用这些标签,提高开发效率和代码质量。 ... [详细]
  • ImtryingtoaccessarequestfromanHTMLform,andsenditasamail,butIgetamailwithaval ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • PHP编程学习心得与技巧分享
    strpos($str1,$str2[$offset]);str1中搜索str2,返回第一次出现的位置,头是0;echo`ipconfig`;等效于echoshell_exec(ipconfig);echo@(30);&& ... [详细]
  • 本文目录一览:1、php月薪多少合适2、php ... [详细]
author-avatar
某一句爱的搁浅-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有