javascript - 使用 Laravel 将数据存储为具有 ajax 功能的 API

标签 javascript php jquery ajax laravel

我在 index.blade 中有这段代码:

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="col-sm-offset-2 col-sm-8">
            <div class="panel panel-default">
                <div class="panel-heading">
                    New Task
                </div>

                <div class="panel-body">
                    <!-- Display Validation Errors -->
                    @include('common.errors')

                    <!-- New Task Form -->
                    <form action="/task" method="POST" class="form-horizontal">
                        {{ csrf_field() }}

                        <!-- Task Name -->
                        <div class="form-group">
                            <label for="task-name" class="col-sm-3 control-label">Task</label>

                            <div class="col-sm-6">
                                <input type="text" name="name" id="task-name" class="form-control" value="{{ old('task') }}">
                            </div>
                        </div>

                        <!-- Add Task Button -->
                        <div class="form-group">
                            <div class="col-sm-offset-3 col-sm-6">
                                <button type="submit" class="btn btn-default">
                                    <i class="fa fa-btn fa-plus"></i>Add Task
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>

            <!-- Current Tasks -->
            @if (count($tasks) > 0)
                <div class="panel panel-default">
                    <div class="panel-heading">
                        Current Tasks
                    </div>

                    <div class="panel-body">
                        <table class="table table-striped task-table">
                            <thead>
                                <th>Task</th>
                                <th>&nbsp;</th>
                            </thead>
                            <tbody>
                                @foreach ($tasks as $task)
                                    <tr>
                                        <td class="table-text"><div>{{ $task->name }}</div></td>

                                        <!-- Task Delete Button -->
                                        <td class="text-right">
                                            <form action="/task/{{ $task->id }}" method="POST">
                                                {{ csrf_field() }}
                                                {{ method_field('DELETE') }}

                                                <button type="submit" id="delete-task-{{ $task->id }}" class="btn btn-danger">
                                                    <i class="fa fa-btn fa-trash"></i>Delete
                                                </button>
    </form>
    </td>
    </tr>
    @endforeach
    </tbody>
    </table>
    </div>
    </div>
    @endif
    </div>
    </div>

这很好用... 现在 - 只是为了好玩,我尝试使用 jquery ajax 存储数据,所以我编写函数 dodaj() :

function dodaj(){

            var name = 'JASAMBRE';

            $.ajax({
                url: "/store",
                type: "POST",
                async: true,
                data: {
                    name: name
                },
                dataType: "html",

                success: function (data) {
                    console.log(data);

                },
                error: function (data) {
                    console.log(data);
                    console.log('GRESKA NEKA');
                }


            });
        }

现在,当我从浏览器运行函数时,我得到 500 Internal Server error

我现在必须发送我的身份验证数据,但我如何使用 jquery ajax 存储数据?

更新:我尝试:

$.ajaxPrefilter(function(options, originalOptions, xhr) {
            var token = $('meta[name="csrf_token"]').attr('content');

            if (token) {
                return xhr.setRequestHeader('X-XSRF-TOKEN', token);
            }
        });
        function dodaj(){

            var name = 'JASAMBRE';

            $.ajax({
                url: "/store",
                beforeSend: function (xhr) {
                    var token = $('meta[name="csrf_token"]').attr('content');

                    if (token) {
                        return xhr.setRequestHeader('X-XSRF-TOKEN', token);
                    }
                },
                type: "POST",
                async: true,
                data: {
                    name: name
                },
                dataType: 'json',

                success: function (data) {
                    console.log(data);

                },
                error: function (data) {
                    console.log(data);
                    console.log('GRESKA NEKA');
                }


            });
        }

最佳答案

当使用 csrf_field() 时,它会创建一个名为“_token”的隐藏字段,您可以使用浏览器上的“查看源代码”功能来验证它。 无论如何,您可以做的是在执行 HTTP 请求时获取此字段的值并将其附加到您的数据中。

// knowing that this field exists
var token = document.getElementsByName('_token')[0].value;
$.ajax({
  url: '/task',
  type: 'POST',
  data: {
     name: name,
     _token: token
  },
  ...      
});

关于javascript - 使用 Laravel 将数据存储为具有 ajax 功能的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145132/

相关文章:

Javascript 迭代 .NET SerializedJson

javascript - 我是否应该重新验证已在 javascript 中验证的 php 中的表单输入

jquery - 使用 handlebars.js 在下拉列表中设置选定值

javascript - 如何取消选中 jquery 中最接近的标题复选框 - 具有同一类的多行中的多标题

javascript - 使用 jQuery.map 后使用 JSON.stringify 的问题

javascript - jquery 仅显示 1 个事件元素

javascript - 如何使用 javascript 将相对 img src 标记更新为绝对路径

javascript - 如何在选项选择上隐藏 div

php - 这是 MVC 吗?

javascript - Jquery AJAX 函数 - 如何使用 JSON 变量?