簡體   English   中英

將帶有Ajax的表單數據發布到控制器操作時遇到麻煩(laravel)

[英]Having troubles posting form data with ajax to controller action (laravel)

路線:

Route::post('admin/cms/create','CmsController@createmenu');

管制員的行動:

public function createmenu(Request $request){
        $menu = new menu;
        $this->validate($request,[
            'name'=>'required',
            's_title'=>'required_if:s_exist,1',
            's_desc'=>'required_if:s_exist,1',
            's_path'=>'required_if:s_exist,1',
            'category'=>'required'
        ]);
        $path=$request->file('s_path')->store('img/slideshow');
        $menu::create([
            'name'=>$request->name,
            's_exist'=>$request->s_exist,
            's_title'=>$request->s_title,
            's_desc'=>$request->s_desc,
            's_path'=>$path,
            'category'=>$request->category
        ]);
        return redirect('admin/cms');
    }

Ajax(jquery):

$("#f_ins_menu").on("submit",function(e){
    e.preventDefault();
    var data={};
    $.ajax({
        type:"POST",
        //url:$(this).attr("action"), //I would like it to work with this dynamic url
        url:"cms/create", //this file is inside the folder admin
        //I also tried without the map function
        data:$(this).serializeArray().map(function(x){data[x.name] = x.value;}),
        contentType:false,
        cache:false,
        processData:false,
    });
});

createmenu動作無需使用ajax

我還有另一個使用Ajax的操作,它可以工作,但是區別是:在該操作中,我沒有傳遞Request $request ,實際上我沒有傳遞任何東西。

我已經在原生PHP中嘗試過,並且可以正常工作。 請注意,我添加了contentType:false, cache:false, processData:false,因為我還傳遞了一個文件。

我試圖使$ request參數死掉並弄傻(dd),我得到了一大堆代碼,我想是一個類,所以我的想法是Request $ request param無法獲取我通過ajax傳遞的數據

是的,我已經將CSRF_FIELD包含在我在這里https://laravel.com/docs/5.4/csrf中找到的元標記技巧中

有人可以幫我至少看到我傳遞的數據是數組格式還是json格式,沒關系。

我不希望你們遍歷所有這些代碼。 您能給我這個功能/動作的正確版本嗎?

public function createmenu(Request $request){
    return dd($request); //I've tried this but it returns alot of code in console.log when I do the success:function()
}

我只想查看傳遞的數據,至少可以從那里去。

編輯:

忘記了,使用validate方法的HTTP響應為422,而沒有通過驗證的HTTP響應為500

編輯2:

好的,因此在響應Ajax時不要使用die and dumb(dd()),而應使用return和一些數據。 由於@Lorav的注釋,我能夠從ajax訪問請求:

data:{data:$(this).serialize()},

$data = $request->data;

所以這不是一個Request類的問題,我的語法是錯誤的。

使用$ request-> all()將姿勢數據作為array。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM