Action拒绝返回布尔值

时间:2016-05-30 01:57:07

标签: javascript ajax laravel laravel-5 laravel-5.2

我有标准destroy操作:

public function destroy($id)
{
    return Quiz::find($id)->delete();
}

通过以下AJAX调用访问:

// The CSRF token is included automatically!
$.ajax({
    url: /quiz/10,
    type: 'POST',
    data: {_method: 'DELETE'},
    success: function(response){
        if(response){
            // do stuff..
        }
    }
});

问题

进行AJAX调用时,chrome控制台会显示以下错误:

enter image description here

奇怪的是,如果删除return,,一切正常,但我需要返回状态代码。有人可以解释为什么会这样吗?或者,至少,如何调试此问题?

更新

如果我像这样重写destroy动作,那么一切都会正常运作:

public function destroy($id)
{
    return Quiz::delete($id);
}

但我仍然无法理解为什么第一个行动不起作用?

3 个答案:

答案 0 :(得分:1)

似乎发生Trying to get property of non-object错误 试试这个

public function destroy($id)
{
    return Quiz::destroy($id);
}

答案 1 :(得分:1)

您无法返回布尔值(Quiz::find($id)->delete();返回truefalse),最好做以下事情,

$deleted =  Quiz::find($id)->delete(); //this will return true/false

return response()->json(['success' => $deleted]);

在前端

$.ajax({
    url: /quiz/10,
    type: 'POST',
    data: {_method: 'DELETE'},
    success: function(response){
        if(response.success == true){
            // do stuff..
        } else {
            // something went wrong when deleting the record.
        }
    }
});

答案 2 :(得分:0)

你可以做这样的事情

public function destroy($id) {

    $quiz =  Quiz::find($id);
    $quiz->delete();

    if ($quiz) {
        return response()->json('true');
    } else {
        return response()->json('false');
    }
}

响应显然是一个json,如果测验被删除则包含true,如果出现错误则包含false

我不擅长js但是:

$.ajax({
    url: /quiz/10,
    type: 'POST',
    data: {_method: 'DELETE'},
    success: function(response){
        if(response == 'true'){ // should work i guess
            // do stuff..
        }
    }
});