Laravel:通过无表单的 AJAX 向控制器发送数据
Posted
技术标签:
【中文标题】Laravel:通过无表单的 AJAX 向控制器发送数据【英文标题】:Laravel: Send Data to Controller via AJAX Without Form 【发布时间】:2017-08-30 01:44:51 【问题描述】:我需要在单击按钮时通过 JS 将数据发送到 Laravel 控制器。我没有使用任何形式,因为数据是动态创建的。 每次我尝试发送数据时,都会收到内部服务器错误 (500),但无法在控制器或 laravel.log 文件中捕获该异常。
这就是我正在做的事情:
路线:
Route::post('section/saveContactItems', 'SectionController@saveContactItems');
控制器:
public function saveContactItems($id, $type, $items, $languageID = "PT") ...
JS:
$('button').on("click", function (evt)
evt.preventDefault();
var items = [];
var id = $("#id").val();
var languageID = $("#languageID").val();
var data = id: id, type: type, items: JSON.stringify(items), languageID: languageID ;
$.ajax(
url: "/section/saveContactItems",
type: "POST",
data: data,
cache: false,
contentType: 'application/json; charset=utf-8',
processData: false,
success: function (response)
console.log(response);
);
);
我做错了什么?我怎样才能做到这一点?
更新:感谢@ShaktiPhartiyal 的answer(和@Sanchit 的帮助)我能够解决我的问题。如果其他人遇到类似问题,在遵循@Shakti 的回答后,我无法访问控制器中的数据。因此,我必须在将数据发送到服务器之前对其进行字符串化:
data: JSON.stringify(data),
【问题讨论】:
当你使用 POST 时,你必须通过csrf_token
字段...
@sanchitGupta 我试过了,但也没有成功......
好的...让我们试试下面的@ShaktiPhartiyal 回答...如果它有效,请告诉我
【参考方案1】:
你不需要使用
public function saveContactItems($id, $type, $items, $languageID = "PT") ...
您必须执行以下操作:
public function saveContactItems()
$id = Input::get('id');
$type = Input::get('type');
$items = Input::get('items');
$languageID = Input::get('languageID');
是的,正如@Sanchit Gupta 建议的那样,您需要在请求中发送 CSRF 令牌:
AJAX 发送 CSRF 令牌的方法:
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
如果你使用这种方法,你需要像这样设置一个元标记:
<meta name="csrf-token" content="csrf_token()">
或
data:
"_token": " csrf_token() ",
"id": id
更新
正如@Sanchit Gupta 指出的那样使用 Input 门面:
use Input;
【讨论】:
我终于可以访问控制器操作 :) 现在我收到以下错误:异常 'Symfony\Component\Debug\Exception\FatalErrorException' 带有消息 'Class 'App\Http\Controllers\Input'成立'。这是由 $id = Input::get('id'); 在控制器顶部使用Input
外观
解决了错误,但是出来的数据是空的。这是我发送给控制器的内容:对象 id:“5”,类型:“电子邮件”,项目:“[]”,语言 ID:“PT”
它的工作!只需要在将数据发送到控制器之前对其进行字符串化: JSON.stringify(data);
很好解释@ShaktiPhartiyal +1。快乐编码:)以上是关于Laravel:通过无表单的 AJAX 向控制器发送数据的主要内容,如果未能解决你的问题,请参考以下文章
Laravel,尝试通过 AJAX 向控制器传递数据时出现不匹配的令牌错误
如何使用 laravel 通过 jquery ajax 将表单值插入数据库?
使用 Laravel 和 Select2 向 HTTP 提供 HTTPS 的 jQuery AJAX 请求