从 JavaScript 向 PHP 控制器传递和获取 ID

Posted

技术标签:

【中文标题】从 JavaScript 向 PHP 控制器传递和获取 ID【英文标题】:Pass and Get ID from JavaScript to PHP Controller 【发布时间】:2016-06-16 08:30:36 【问题描述】:

我有一个内联可编辑表(为此我使用了Tabledit),每一行都有一个 ID,ID 应该传递给控制器​​操作 (Yii2),以便我将编辑后的数据保存到数据库中。这是我的 js 文件中的 Tabledit 代码:

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);
    
);

我期待它会在保存内联编辑后指向指定的 url(urlID 其中save-inline-edit 是我的控制器中的一个操作函数--public function actionSaveInlineEdit($id)...),但是当我检查元素时(保存后) ,它给了我这个错误:

然后我放置了一个console.log 来查看错误详细信息,我得到了这个:

“错误请求(#400):缺少必需的参数:id”

这是我的控制器操作:

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 \yii\helpers\Json::encode([
        'message' => 'success',
    ]);

我真的不知道如何解决这个问题。如何将 id 传递给控制器​​?我希望你明白这一点。如果您有任何问题,请告诉我。如果您对实施有其他想法,也请告诉我。

【问题讨论】:

如果您将其作为parameter 传递,那么我猜您的url 应该是var urlID = "../save-inline-edit?" + file[0].assetID;,即附加? 在 yii2 中,特别是在我正在工作的这个项目中,url、美化和 ID 在动作名称后面的斜杠后面传递,在我的例子中是 ../save-inline-edit/[ID] 不确定,但您的操作名称似乎是 actionSaveInlineEdit,在 urlID 中是 save-inline-edit? yii2的函数命名中就相当于 基本上错误表示您没有将id 参数提供给操作。不知道如何通过yii2 传递,因为我对此一无所知.. 【参考方案1】:

当您将 id 作为 file.assetID 放在代码开头并使用 file[0].assetID 获取 id

请使用 file.assetID 获取 url 中的 id。

谢谢

【讨论】:

您好,谢谢。是的,但是如何将它传递给控制器​​? var urlID = "../save-inline-edit/";使用 ex 额外参数,例如 url: urlID, data: id: file.assetID,像这样 我刚刚尝试了您的建议。但问题是我在将id 传递给url 中的控制器时遇到问题。我仍然遇到同样的错误。 看来您应该使用GET 方法将数据发送到服务器端。但是 Tabledit 使用 POST 方法代替。但我可能错了)

以上是关于从 JavaScript 向 PHP 控制器传递和获取 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量和数据从 PHP 传递到 JavaScript?

如何将变量和数据从 PHP 传递到 JavaScript?

将变量从 PHP 传递到 javascript 并传递到 html 表单

将变量从 WordPress PHP 传递到 JavaScript

通过 AJAX 将数组从 php 传递到 javascript

将 JSON 数据从 php 传递给 html-data 属性,然后传递给 Javascript