将数据从 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 [重复]