Laravel 4中的多个Ajax PUT给出了错误

时间:2013-05-10 22:53:47

标签: laravel laravel-4

我通过jQuery Ajax Put通过资源控制器更新我的Model。第一次没问题。这很好用:

        $(".addNest").click(function() {
            var nid = msg; //once the LI is added, we grab the return value which is the nest ID
            var name = $('.nestIn').val();

            if(name == '') {
                $("textarea").css("border", "1px solid red");
            }else {

                $.ajax({
                    type: 'PUT', // we update the default value
                    url: 'nests/' + nid, 

                    data: {
                        'name': name
                    },
                    success: function(msg) {
                        alert(msg)
                        window.location.replace('nests/' + nid ); //redirect to the show view
                    }
                });

            }

        });

稍后在一个单独的代码块中,我尝试再次调用PUT:

$(".nestEdit").click(function() {

$(".nestEdit").hide();
var name = $('.nestName').data("name");
var nid = $('.nestName').data("id");

$(".nestName").html("<textarea class='updateNest'>"+ name +"</textarea> <span><a href='#' class='btn btn-mini nestUpdate'><i class='icon-plus'></i> Update</a></span>");

$(".nestUpdate").click(function() {

    var updatedName = $('.updateNest').val();

        $.ajax({
            type: 'PUT', // we update the default value
            url: 'nests/' + nid, 

            data: {
                'name': updatedName
            },
            success: function(msg) {
            alert(msg) // showing the error here
            location.reload( ); //refresh the show view
        }
    });
});

当''提醒'时,'updatedName'值和'nid'值正常传递。当我查看第一个PUT的返回时,它会恢复正常。但是,当我查看第二个PUT的返回时,我得到了这个:

{"error":{"type":"Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException","message":"","file":"\/Applications\/MAMP\/htdocs\/n4\/bootstrap\/compiled.php","line":8643}}

有人在这里有一些见解吗?你可以告诉我,我正在尝试进行内联编辑。我试图将所有东西都包装成一个函数,但仍然无法帮助......

2 个答案:

答案 0 :(得分:1)

Laravel本身并不使用PUT和DELETE,因为并非所有浏览器都支持它,您需要发送一个POST请求,并将'_method'设置为put或delete。

$.ajax({
        type: 'POST', 
        url: 'nests/' + nid, 

        data: {
            'name': updatedName,
            '_method': update
        },
        success: function(msg) {
        alert(msg) // showing the error here
        location.reload( ); //refresh the show view
    }

编辑:Ajax请求支持PUT AND DELETE。

答案 1 :(得分:0)

在JavaScript代码中,对于内联编辑,您没有正确使用$

如果单击.nestEdit,它的内部函数不应该按名称调用它,前提是该页面上有多个同一类的对象。这就是你得到错误的原因。它不是发送嵌套ID,而是发送一个数组对象,Laravel路由器不会接收它,因为很可能没有定义它。

简单地说,你不应该这样做:

$(".nestEdit").click(function() {
    $(".nestEdit").hide();
    ...

您应该拨打this

$(".nestEdit").click(function() {
    $(this).hide();
    ...

因此,对于内部函数中的每个.nestEdit,您需要调用this