我意识到还有其他一些关于此的问题,我已经阅读了它们并尝试了解决方案,但是它们对我不起作用。这可能是因为我将帖子序列化了两次,因为我传递了由 jQuery/JavaScript 序列化的整个表单。
我的 PHP 数组是二维的?一个包含文件名:
$aDocumentFilesArrayFileName[0][0];
我的 PHP 中通常有一维数组,所以我通过以下方式传递它们:
<input type="hidden" name="arrayName[]" value="$value[$i]"> // (while in a loop
我不确定当我根据名称引用第一个数组时应该使用什么语法以及我应该使用什么值。
我尝试将该值用作:serialize($aDocumentFilesArrayFileName) 并在另一端解码,但我收到一条错误消息,提示字符串期望找到数组?
** 编辑 **
我想我本可以让问题更清楚,但只是为了澄清。这是我的 jQuery Ajax 提交函数:
var conflictData = $("input, select", conflictsTable.fnGetNodes()).serialize(); // fnGetNodes is just a datatables function to go through every row in a table - don't worry about that
$.ajax(
{
type: 'POST',
url: 'sqlHandleConflictsDocumentRegister.php?node='+nodeType+'&id='+nodeId,
cache: false,
data: conflictData,
success: function(result)
{
// Do stuff here
}
});
我已经尝试过使用 json_encode 而不是在我的 PHP 输入语句上序列化的解决方案。那是行不通的。这是我在 PHP 表单中使用的确切代码。请注意,此行在表单中表格的每一行发生的循环内。
<input type="hidden" name="arrayFileName[]" value="<?php echo json_encode($aDocumentFilesArrayFileName[$i]); ?>">
这是我在 PHP ajax 脚本中使用的代码:
$fileNames = json_decode($_POST['arrayFileName']);
错误是:json_decode() 期望参数 1 是字符串,数组在 C:\wamp\www\document\sqlHandleConflictsDocumentRegister.php 中第 65 行
我正在序列化(在 JavaScript 中)不同维度的数组数据的问题是什么?我的其他输入来自具有简单数组数据(每行一个值)的行,它们工作正常。这个特定的数组输入与每个表行关联的文件名数量不受限制,因此输入值是一个数组。
我还在另一个输入中传递了文件数量(每个表行)的值。也许我可以用它来帮助提取另一边的数组。
<input type="hidden" name="quantityFiles[]" value="<?php echo $aDocumentQuantityFiles[$i]; ?>">
** 更新 **
我使用了 alert(conflictData) 并发现数组数据很好,除了 arrayFileName 字段为空。如果我回显 json_encode($aDocumentFilesArrayFileName[$i]) 那么我会得到预期的结果。
因此,看起来 jQuery serialize() 正在破坏这些数据。也许有一种方法可以更好地为 ajax 提交准备数据变量?
** 更新 2 **
感谢大家对答案的帮助和贡献。我已经在使用 json_encode 将数据导入 javascript 以便在其中进行操作,因此我放弃了使用输入字段来序列化和发送数据,而是直接使用 $.ajax 的数据参数来发送数组进行处理。
由于没有提供明显正确的解决方案,我在下面发布了一个解决方案并将其标记为正确答案,因为我现在能够在目标 PHP 文件中获取多维数组数据。