即使被阻止,Ajax DELETE也会重定向

时间:2016-06-19 20:51:15

标签: php jquery ajax laravel

我尝试使用DELETE方法从数据库中删除行,并在Laravel 5.2项目中使用AJAX。一切正常,图片从服务器中删除,行从数据库中删除但删除后重定向到JSON响应。

我的控制者的行动:

public function deletePhoto(Photo $photo)
{
    if ($photo->delete()) {
        unlink('files/' . $photo->filename);
        unlink('files/thumbs/' . $photo->filename);

        return response()->json(['result' => 0]);
    }

    return response()->json(['result' => 1]);
}

在添加照片时它会以这种方式工作(它会添加,但不会重定向)。

这是我的ajax代码:

$('#deleteForm').submit(function(e) {
        var currentElement = $(this);
        var formUrl = $(this).attr('action');

        $.ajax({
            type: 'POST',
            url: formUrl,
            data: {_method: 'delete', _token: '{{ csrf_token() }}'},
            success: function(data) {
                if (data.result == 0) {
                    currentElement.parent().fadeOut(400, function() {
                        $(this).remove();
                    });
                } else {
                    alert('Wystąpił błąd podczas usuwania zdjęcia! Proszę spróbować ponownie!');
                }

            }
        });

        return false;
    });

我尝试了许多方法,令牌和数据的更改(来自laracast和stackoverflow),但没有任何效果。

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

为您的提交事件添加阻止默认值。该页面正在重定向,因为您正在启动提交事件。

e.preventDefault();

将提交事件更改为:

$("#form-submit-button").click(function(e){

});

答案 1 :(得分:0)

试试这个:

$('#deleteForm').submit(function(e) {
    e.preventDefault()
    var currentElement = $(this);
    var formUrl = $(this).attr('action');

    $.ajax({
        type: 'POST',
        url: formUrl,
        data: {_method: 'delete', _token: '{{ csrf_token() }}'},
        success: function(data) {
            if (data.result == 0) {
                currentElement.parent().fadeOut(400, function() {
                    $(this).remove();
                });
            } else {
                alert('Wystąpił błąd podczas usuwania zdjęcia! Proszę spróbować ponownie!');
            }

        }
    });

    return false;
});

您需要添加preventDefault以防止网页重定向

答案 2 :(得分:0)

从控制台检查javascript代码是否存在错误以使用e.preventDefault