从 JavaScript 向 PHP 控制器传递和获取 ID
我有一个内联的可编辑表格(我为此使用了
然后我放置了一个 console.log
来查看错误详细信息,我得到了这个:
错误请求(#400):缺少必需的参数:id"
这是我的控制器操作:
公共函数 actionSaveInlineEdit($id){header('Content-Type: application/json');$assetModel = $this->findModel($id);$input = filter_input_array(INPUT_POST);if ($input['action'] === 'edit') {$assetModel->title = "";$assetModel->description = "";$assetModel->保存(假);} else if ($input['action'] === 'delete') {$assetModel->status = "已删除";$assetModel->保存(假);}回声 json_encode($input);返回 yiihelpersJson::encode(['消息' =>'成功',]);}
我真的不知道如何解决这个问题.如何将 id 传递给控制器?我希望你明白这一点.如果您有任何问题,请告诉我.如果您对实施有其他想法,也请告诉我.
解决方案当你把 id 作为 file.assetID 放在代码的开头并使用 file[0].assetID 获取 id
请使用 file.assetID 获取 url 中的 id.
谢谢
I have an inline editable table (I used Tabledit for this) and each row has an ID and the IDs should be passed to the controller action (Yii2) in order for me to save edited data to the database. Here's my Tabledit code in my js file:
file.assetID = info.response; // the ID
for (var i = 0; i < file.length; i++) { // the table
if (file[i].type == "image/jpeg") {
var type = "photo";
} else if (file[i].type == "video/mp4") {
var type = "video";
}
messageHtml += '<tr id="' + file[i].assetID + '">';
messageHtml += '<td style="display:none;" id="' + file[i].assetID + '">' + file[i].assetID + '</td>';
messageHtml += '<td>' + file[i].name + '</td>';
messageHtml += '<td>' + type + '</td>';
messageHtml += '<td>' + file[i].size + " KB" + '</td>';
messageHtml += '<td><input type="text" class="form-control" placeholder="Tag"></td>';
messageHtml += '<td><input type="text" class="form-control" placeholder="Description"></td>';
messageHtml += '</tr>';
}
var urlID = "../save-inline-edit/" + file[0].assetID; // url plus the ID of the row
$('#uploader_table').Tabledit({
url: urlID,
columns: {
identifier: [0, 'id'],
editable: [[1, file.name]/*, [3, file.tag], [4, file.description]*/]
},
onSuccess: function(data, textStatus, jqXHR) {
console.log(data);
console.log(textStatus);
console.log(jqXHR);
},
onFail: function(jqXHR, textStatus, errorThrown) {
console.log(file.assetID);
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
}
});
I was expecting that it would point to the url specified (urlID
where save-inline-edit
is an action function in my controller--public function actionSaveInlineEdit($id){...}
) after saving the inline edit, but as I inspect element (after saving), it gives me this error:
Then I placed a console.log
to view the error details and I get this:
"Bad Request (#400): Missing required parameters: id"
Here's my controller action:
public function actionSaveInlineEdit($id)
{
header('Content-Type: application/json');
$assetModel = $this->findModel($id);
$input = filter_input_array(INPUT_POST);
if ($input['action'] === 'edit') {
$assetModel->title = "";
$assetModel->description = "";
$assetModel->save(false);
} else if ($input['action'] === 'delete') {
$assetModel->status = "deleted";
$assetModel->save(false);
}
echo json_encode($input);
return yiihelpersJson::encode([
'message' => 'success',
]);
}
I really don't know how to figure this out. How do I pass the id to the controller? I hope you understand this. Please let me know if you have questions. If you have other idea for the implementation, let me know as well.
解决方案As you put the id as file.assetID in start of code and get the id using file[0].assetID
please use file.assetID to get the id in url.
Thanks
相关文章