我有标准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);
}
但我仍然无法理解为什么第一个行动不起作用?
答案 0 :(得分:1)
似乎发生Trying to get property of non-object
错误
试试这个
public function destroy($id)
{
return Quiz::destroy($id);
}
答案 1 :(得分:1)
您无法返回布尔值(Quiz::find($id)->delete();
返回true
或false
),最好做以下事情,
$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..
}
}
});