Laravel控制器:AJAX在请求内容中放置请求数据



>我正在向我的ItemController发送一个 POST 请求,请求通过了,可以生成响应。但是我无法提取 AJAX 请求传递的数据。

下面是一个片段脚本/刀片模板内容:layout.blade.php

<script>
$("#ajaxRequest").click(
function(){
$.ajax({
url: '/itemAjaxReq',
type: 'POST',
dataType: 'html',
contentType:'application/json',
headers:{'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
data: 
{ 
data1: 'ABC', 
data2: 'DEF'                       
},
error: function() {alert('Error');},
success: function(response) {                                                    
$('#ajaxResponse').empty();
$('#ajaxResponse').append(response);
}
});
</script>
<div>
<meta name="csrf-token" content="{{ csrf_token() }}">
<button id="ajaxRequest">Test ajax request</button>
</div>
<div id="ajaxResponse">
</div>

路线:网络.php

Route::post('itemAjaxReq','ItemController@ajaxReq')->name('items.ajaxReq');

型号:项目控制器.php

namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppItem;
use IlluminateValidationRule;
class ItemController extends Controller
{   
//... some skipped functions
public function ajaxReq()
{
if(request()->ajax())
{
error_log("This is an AJAX Request");
//dd(request());
$data = request()->all();
//dd($data);
error_log("Request :n" . request() . "n");
error_log("data1 : " . request()->input('data1'));
error_log("data2 : " . request()->data2);
error_log("data3 : " . request()->data3);
return "Response :n"."Some data here";
}
}
}

如果我取消注释dd($data),我得到空数组([](。如果我取消注释dd(request()),则数据将显示在受保护的变量#content上。这是代码片段:

IlluminateHttpRequest {#51 ▼
#json: SymfonyComponentHttpFoundationParameterBag {#43 ▶}
#convertedFiles: null
#userResolver: Closure($guard = null) {#31 ▶}
#routeResolver: Closure() {#253 ▶}
+attributes: SymfonyComponentHttpFoundationParameterBag {#53 ▶}
+request: SymfonyComponentHttpFoundationParameterBag {#43 ▶}
+query: SymfonyComponentHttpFoundationParameterBag {#59 ▶}
+server: SymfonyComponentHttpFoundationServerBag {#55 ▶}
+files: SymfonyComponentHttpFoundationFileBag {#56 ▶}
+cookies: SymfonyComponentHttpFoundationParameterBag {#54 ▶}
+headers: SymfonyComponentHttpFoundationHeaderBag {#57 ▶}
#content: "data1=ABC&data2=DEF"
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: null
#pathInfo: "/itemAjaxReq"
#requestUri: "/itemAjaxReq"
#baseUrl: ""
#basePath: null
#method: "POST"
#format: null
#session: IlluminateSessionStore {#273 ▶}
#locale: null
#defaultLocale: "en"
-preferredFormat: null
-isHostValid: true
-isForwardedValid: true
basePath: ""
format: "html"
}

如果我扩展+attributes+request+query属性,我会得到#parameters: []

我在传递数据时是否犯了错误?如何从内容属性中提取它?

对于Laravel>= 5.5,你可以简单地调用

$request->post() or $request->post('my_param')

内部调用

$request->request->all() or $request->request->get('my_param')

分别。

希望对您有所帮助。

好的,我已经解决了这个问题。但我不明白为什么解决方案有效。

我将 AJAX 请求contentTypecontentType:'application/json'更改为contentType:'application/x-www-form-urlencoded'

问题不在于使用不使用$request,也不在于通过->post('data1')->input('data1')获取它。使用request()或直接通过->data1获取它可以正常工作。

最新更新