【问题标题】:Sending data from javascript to Laravel Controller将数据从 javascript 发送到 Laravel 控制器
【发布时间】: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

标签: javascript ajax laravel


【解决方案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'));。来源:stackoverflow.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
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 2016-11-07
      • 2017-03-11
      • 1970-01-01
      • 2021-04-07
      • 2020-08-21
      • 1970-01-01
      • 2014-05-17
      • 2021-05-17
      相关资源
      最近更新 更多