将数据从 javascript 发送到 Laravel 控制器

Posted

技术标签:

【中文标题】将数据从 javascript 发送到 Laravel 控制器【英文标题】:Sending data from javascript to Laravel Controller 【发布时间】:2019-07-25 14:49:42 【问题描述】:

我在将数据从 javascript 发送到我的控制器时遇到问题。 还有我的Ajax

var point = JSON.stringify(points);

function onBtnClick() 
    $.ajaxSetup(
      header:
        'X-CSRF-TOKEN':$('meta[name="csrf-token"]').attr('content')
      
    );

    $.post('http://localhost/updateC', 
        data: point,
        dataType: 'json', 
        contentType:'application/json', 
    )
    .done(function() 
        alert('success');
    )
    .fail(function() 
        alert("error");
    );


路线:

Route::get('/home', 'HomeController@index')->name('home');
Route::resource('/races','RacesController');
Route::post('updateC', 'RacesController@Points');

还有我的 RacesController:

public function Points(Request $request) 
    $test = $request->input('data');
    return "$test";

错误是说它已被 CORS-polices 阻止。

【问题讨论】:

需要添加 x-csrf-token 标头,查看文档:laravel.com/docs/5.7/csrf 您必须发布哪些数据?...或显示您的表格? 数据是我创建的点 points[currentid] = id: currentid, x: event.offsetX, y: event.offsetY; currentid++; 您是否在您的ajax 发送页面中添加了<meta name="csrf-token" content=" csrf_token() ">。并请您的浏览器控制台截图。 Ajax 请求。 我试过了还是不行。但是这是我的错误link 【参考方案1】:

进入中间件文件夹,verifycsrftoken 文件,

app/Http/Middleware/VerifyCsrfToken.php

并将这个 url 添加到 except 数组中

protected $except = [
   ....
   http://localhost/updateC
];

要处理您的 ajax 发布请求的异常,然后您可以使用

Barryvdh Laravel Cors 包来解决 cors 问题,

如果你使用的是 laravel 5.6,你不需要任何 CORs 包,

只需创建一个 COR 中间件

namespace App\Http\Middleware;
use Closure;
class Cors 

    public function handle($request, Closure $next) 
        $allowedOrigins = ['http://oursite.com', '*.myost.net','*','www.aminu.*'];
        $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
        if (in_array($origin, $allowedOrigins)) 
            return $next($request)
                ->header('Access-Control-Allow-Origin', $origin)
                ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
                ->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-Request-With, cache-control,postman-token, token')
                ->header('Access-Control-Allow-Credentials',' true');
        
        return $next($request);
    

并将中间件添加到 kernel.php 文件中

protected $middleware = [
    ......
    \App\Http\Middleware\Cors::class, //added here
];

【讨论】:

在您的app\Http\Kernel.php 文件中注册此中间件后,您可能希望在路由中指定使用的中间件:Route::post('/updateC', array('middleware' => 'cors', 'uses' => 'RaceController@point'));。来源:***.com/questions/33076705/… 我已注册并使用了您的路线,但仍然无法使用。【参考方案2】:
app/Http/Middleware/VerifyCsrfToken.php

并将这条路由添加到 except 数组中

protected $except = [
   'updateC'
];

【讨论】:

【参考方案3】:

您必须在 ajax 帖子的 data 属性中添加 csrf 令牌,如下所示:

data: 
    "_token": " csrf_token() ",
    "point": point

【讨论】:

什么都没有改变,仍然是同样的错误。看看我链接的第一个答案。【参考方案4】:

Ajax 代码

var abc = 'hello world';

$.ajax(
    type: "GET",
    url: 'http://your url',
    data :  abc : abc 
    success: function (data) 

        // write your code
    ,
    error: function (data) 
        // write your code
    
);

【讨论】:

以上是关于将数据从 javascript 发送到 Laravel 控制器的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 JavaScript 发送到服务器到 PHP,得到 500 错误

如何将 Json 数据从 javaScript 发送到 Flask

将数据从 java 发送到 javascript 页面到 href 函数中

使用 Jinja 将数据作为 JSON 对象从 Python 发送到 Javascript [重复]

为啥将数据从 php 发送到 javascript (Laravel) 时进行 json 编码?

将数据从 javascript 发送到 html 并使用 php 获取