我通过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}}
有人在这里有一些见解吗?你可以告诉我,我正在尝试进行内联编辑。我试图将所有东西都包装成一个函数,但仍然无法帮助......
答案 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
。