加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – Laravel:无法创建正确的DELETE操作请求

发布时间:2020-12-16 02:57:47 所属栏目:百科 来源:网络整理
导读:无法在Laravel中创建删除操作. 我一直在收到Not Found或Token mismatch错误. 我的控制器: class TranslationController extends Controller{ public function destroy($id) { //$id = 1; /*$translation = Translation::find($id); $translation-delete();*
无法在Laravel中创建删除操作.

我一直在收到Not Found或Token mismatch错误.

我的控制器:

class TranslationController extends Controller
{
    public function destroy($id)
    {       
        //$id = 1;
        /*$translation = Translation::find($id);
        $translation->delete();*/
    }
    ....
}

Ajax调用:

/* Delete given translation */
    var url = "translation";
    var id = 1; 

    $.ajax({
        method: 'DELETE',url: url + '/' + id,// data: {'id': id,'_token': token},success: function() {

        }
    });

这将给出VerifyCsrfToken.php第53行中的TokenMismatchException:

如果我尝试:

url: url + '/' + id,data: {'_token': token},// token is equal to csrf_token

我有:Controller.php第269行中的NotFoundHttpException:

路线:

Route::controller('translation','TranslationController');

否则我使用的是Laravel 5默认中间件,我没有改变任何与csrf相关的内容.

解决方法

NotFoundHttpException意味着没有指定具有特定HTTP谓词的特定请求的路由,或者错误地实现了映射到路由的动词的动作(即控制器方法).

既然你在帖子中提到过TranslationController定义为implicit controller,

Route::controller('translation','TranslationController');

从您发布的控制器代码中,很明显您没有在控制器TranslationController中为destroy方法定义动词.

如果您使用终端/命令行界面在项目根目录中执行php artisan route:list,您将看到已注册HTTP谓词的列表,映射到相应的URI以及操作.

要在隐式控制器中定义特定方法,动词(GET,PUT,POST,DELETE)应位于实际函数名称之前.
确保destroy方法在控制器中看起来如下所示:

public function deleteDestroy($id){  
   //delete logic for the resource
}

注意:
Laravel默认情况下要求csrf标记与特定的RESTful请求一起传递,因此不要从AJAX调用中删除数据:{‘_ token’:token}.

更新

忘了提到你的AJAX调用中的url也应该更改为以下代码才能工作,因为这是Laravel的隐式控制器为DELETE请求定义路由的方式:

var url = "translation/destroy";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读