【问题标题】:Ajax on JQuery drag eventJQuery拖动事件上的Ajax
【发布时间】:2015-08-07 23:45:17
【问题描述】:

我正在使用数据库中的数据创建一个嵌套列表。在这个列表中,我使用了JQuery UI Drag 效果。我需要做的是当拖动结束时,它将更新数据库。

该列表包含教授的姓名和他的 ID,它与他的班级作为子列表,例如:

John 教数学和物理,Dwayne 教英语。

约翰
*物理
*数学

德韦恩
*英文

假设我想给 Dwayne 上数学课。因此,我将从 John 中拖出 Math 并将其放在 Dwayne 子列表中。它工作正常。
我不能做的是更新数据库,因为约翰不再教数学,而是约翰将教它。所以我需要在那里进行更新或删除+插入。

Obs:我正在使用 laravel

这是我的代码:

@extends('app')

@section('assets')
    <script type="text/javascript" src="{{ URL::to('/js/jquery.mjs.nestedSortable.js') }}"></script>
@stop

@section('content') 
    <ol>
        @foreach($professores as $prof)
            <li data-id=" {{ $prof->id }}">
                {{ $prof->nome }}
                <ol class="list-disc">
                    @foreach($prof->disc as $disc)
                        <li data-id="{{ $disc->id }}">{{ $disc->nome }}</li>
                    @endforeach
                </ol>
            </li>
        @endforeach
    </ol>

    <script type="text/javascript">
        $(function(){
            var old_teacher;

            $('.list-disc').sortable({
                connectWith: '.list-disc',
                start: function (event, ui){
                    old_teacher = ui.item.parent().parent().attr('data-id');
                },
                stop: function (event, ui){
                    $.ajax({
                        type: "POST",
                        url: '{{ URL::to("/professor") }}',
                        data: {disc: ui.item.attr('data-id'), professor: ui.item.parent().parent().attr('data-id'), old: old_teacher},
                        success: function(data){
                            console.log(data);
                        }
                    });
                }
            });
        })
    </script>

@stop  

使用此当前代码,当我放下物品时,我得到:

内部服务器错误 (500)

更新
路线文件:

Route::post('professor', [
    'uses' => 'ProfessorController@postProfessorList'
    ]);  

控制器文件:

public function postProfessorList()
{
    Professor::submit(Input::post('disciplina'), input::post('professor'),   input::post('old'));
} 

日志文件:更新

local.ERROR: 异常 'Symfony\Component\Debug\Exception\FatalErrorException' 带有消息 'Call to undefined method Illuminate\Http\Request::post()' in F:\PathToProject\vendor\laravel\framework\src \Illuminate\Support\Facades\Facade.php:210

【问题讨论】:

    标签: php jquery ajax laravel draggable


    【解决方案1】:

    Internal Server Error (500) 表示您的服务器端 (laravel) 代码有问题。

    能否提供 POST 中使用的代码:/professor ?

    编辑

    您可能需要在 app/storage 或 storage/ 中检查您的日志(取决于 laravel 版本)。他们应该更好地描述发生的错误。

    另外,您应该将 Input::post('...') 替换为 Input::get('...') laravel 会自动处理 $_GET 和 $_POST 变量。

    编辑 2 您得到的错误是由于 Laravel CSRF 保护造成的。 您需要像这样在 ajax 请求中设置 csrf 令牌:

    data: {disc: ....., _token: '{{csrf_token()}}' }

    【讨论】:

    • 刚刚更新了路线和模型文件。如果可以请举手...谢谢!
    • 好吧,别以为有Input::post()方法。您需要将 Input::post 更改为 Input::get,这应该会返回正确的值。您可能还想检查您可以在 app/storage 中找到的 laravel 日志(至少如果您使用 Laravel 4)——它们应该可以更好地描述发生的错误。
    • 谢谢你!我真的是这个领域的菜鸟。我将使用在日志文件中找到的信息进行更新。
    • 啊,感谢添加错误信息!我会更新我的答案。
    • 现在我得到:Uncaught ReferenceError: MyTokenValueHere is not defined
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多