【问题标题】:add delete function for ajax search results为ajax搜索结果添加删除功能
【发布时间】:2020-02-16 16:42:33
【问题描述】:

我正在尝试使用 ajax/jquery 制作动态表。

显示搜索结果后,我希望每一行都有编辑和删除等操作,这些操作将负责每个条目。这是我的控制器方法

     public function search(Request $request){
    if($request->ajax()){
        $output="";
        // $users=DB::table('users')->where('user_id','LIKE','%'.$request->search."%")->get();   
        $grammar_cards = FlashCard::where('lang','=','gr')
                                ->where(function($query) use ($request){
                                    $query->where('word','LIKE', '%'.$request->search.'%')
                                    ->orWhere('option1','LIKE', '%'.$request->search.'%')
                                    ->orWhere('option2','LIKE', '%'.$request->search.'%')
                                    ->orWhere('option3','LIKE', '%'.$request->search.'%')
                                    ->orWhere('option_correct','LIKE', '%'.$request->search.'%')
                                    ->orderBy('class')
                                    ->orderby('unit_id');
                                })->paginate(20);
        // $flashcards->setPath('custom/url');

                if($grammar_cards){
                    foreach ($grammar_cards as $key => $grammar_card) {
                        $grammarcard_question = $grammar_card->word;
                        $grammarcard_ch1 = $grammar_card->option1;
                        $grammarcard_ch2 = $grammar_card->option2;
                        $grammarcard_ch3 = $grammar_card->option3;
                        $grammarcard_correctchoice = $grammar_card->option_correct;
                        $grammarcard_unit = $grammar_card->unit_id;
                        $grammarcard_class = $grammar_card->class;

                        $output.='<tr>'.
                        '<td>'.$grammarcard_question.'</td>'.
                        '<td>'.$grammarcard_ch1.'</td>'.
                        '<td>'.$grammarcard_ch2.'</td>'.
                        '<td>'.$grammarcard_ch3.'</td>'.
                        '<td>'.$grammarcard_correctchoice.'</td>'.
                        '<td>'.$grammarcard_unit.'</td>'.
                        '<td>'.$grammarcard_class.'</td>'.
                        '<td style="display:flex;">
                            <a href="/admin/grammar/'.$grammar_card->id.'/edit" style="margin-right:10px;"><button class="btn btn-info">რედაქტირება</button></a>
                            <form action="{{ route(\'grammar.destroy\', '.$grammar_card->id.')}}" method="post">
                                @csrf
                                @method(\'DELETE\')
                                <button class="btn btn-danger" type="submit">delete</button>
                            </form></td>'.
                        '</tr>';
                    }
                    return Response($output);
                    // return view('admin.grammar.index', ['output' => $output])->render(); 
                }
            }
    }

这是我的路线

        Route::resource('/admin/grammar', 'GrammarController');

这是我的销毁方法

    public function destroy($id)
{
    $grammar_card = FlashCard::find($id);
    $grammar_card->delete();
    return redirect('admin/grammar')->with('success', 'successfully deleted');
}

This is my output

它打印出@csrf @method('DELETE') 作为文本和删除按钮

When I click the delete button 它转到 url localhost:8000/admin/%7B%7B%20route('grammar.destroy',%2040271)%7D%7D 并输出 419 错误

你能告诉我如何解决这个问题吗?

【问题讨论】:

  • 请在此处添加错误/输出等作为文本,而不是图像。

标签: jquery ajax laravel laravel-blade laravel-controller


【解决方案1】:

您应该使用“$grammar_cards”数据为您正在生成的表创建一个新的刀片视图,而不是在控制器中生成 HTML。

假设您在资源/视图文件夹中创建了“grammar_cards.blade.php”文件。 & 在blade.php 文件中添加以下代码

@if($grammar_cards)
    @foreach($grammar_cards as $key => $grammar_card)
        <tr>
            <td>{!! $grammar_card->word !!}</td>
            <td>{!! $grammar_card->option1 !!}</td>
            <td>{!! $grammar_card->option2 !!}</td>
            <td>{!! $grammar_card->option3 !!}</td>
            <td>{!! $grammar_card->option_correct !!}</td>
            <td>{!! $grammar_card->unit_id !!}</td>
            <td>{!! $grammar_card->class !!}</td>
            <td style="display:flex;">
                <a href="/admin/grammar/'.$grammar_card->id.'/edit" style="margin-right:10px;">
                    <button class="btn btn-info">რედაქტირება</button>
                </a>
                <form action="{{ route(\'grammar.destroy\', '.$grammar_card->id.')}}" method="post">
                    @csrf
                    @method('DELETE')
                    <button class="btn btn-danger" type="submit">delete</button>
                </form>
            </td>
        </tr>
    @endforeach
@endif

在视图中传递“$grammar_cards”变量 像这样。

$table_html = view('grammar_cards')->with(compact('grammar_cards'))->render();

使用 $table_html 传递以响应您想要显示它们的位置。

问题是您使用的是刀片特定功能,例如“@csrf”& “@method”,您不能在其他地方使用,只能使用 .blade.php 文件。

希望有帮助!!

【讨论】:

    猜你喜欢
    • 2016-08-16
    • 2022-10-15
    • 2014-05-20
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多