繁体   English   中英

动作拒绝返回布尔值

[英]Action refuses to return the boolean value

我有标准的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控制台显示以下错误:

在此处输入图片说明

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

更新

如果我这样重写destroy动作,一切将开始正常工作:

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

但是我仍然不明白为什么第一步不能奏效?

似乎Trying to get property of non-object错误的Trying to get property of non-object
尝试这个

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

您不能返回布尔值( 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.
        }
    }
});

你可以做这样的事情

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..
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM