【发布时间】:2016-01-19 23:15:26
【问题描述】:
我看到很多关于完全相同的事情的问题。但是我尝试了很多东西,以至于我真的不确定我正在做的事情是否还有效。
所以,我有这个多维数组,我通过循环通过一个 html 表创建。我想将它发送到 PHP,所以我可以循环它,并创建我需要将它存储在数据库中的对象.
但是当我尝试通过 for each 循环它时,我从 PHP 得到的只是“警告:为 foreach() 提供的参数无效”
function ReturnFamilyMembers()
{
var Family = [];
var Table= document.getElementById('FamilyTable');
var RowQuantity= Table.rows.length;
for (var i = 0; i < RowQuantity; i++)
{
var Columns= Table.rows.item(i).cells;
var ColumnQuantity= Columns.length;
Family[i] = [];
for(var j = 0; j < ColumnQuantity; j++)
{
Family[i][j] = Columns.item(j).innerHTML;
}
}
var headers =
{
'Content-type': 'application/x-www-form-urlencoded',
'X-Requested-With': 'XMLHttpRequest'
};
var FamilyArray = encodeURIComponent( JSON.stringify( Family) );
/*console.info( payload );*/
var xhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
/* Add a callback function to process any response from target url ( Worker.php )*/
xhttp.onreadystatechange = function()
{
if( xhttp.readyState == 4 && xhttp.status == 200 )
{
cbReturnFamilyMembers.call( this, xhttp.response );
}
};
xhttp.open( 'POST', 'Worker.php', true );
for( header in headers ) xhttp.setRequestHeader( header, headers[ header ] );
xhttp.send( 'Family=' + FamilyArray );
}
function cbReturnFamilyMembers($resp,$response)
{
alert($resp + $response);
}
}
还有 php 方面...
$Family = json_decode( $_POST['Family'],true);
foreach($Family as $Array) ---> This line launches the error.
{
foreach($Array as $Value)
{
///object creation
}
}
提前谢谢你。我认为我真的被困在这里,因为我是 PHP、JS 和 AJAX 的新手,所以一切似乎都神奇地发生了。 (真的不能说我做事的方式是否正确。) 我希望我足够清楚,或者如果我能澄清任何事情,请告诉我。
-------------------------------------------------------------------------- ----------------------------------
编辑:很抱歉回复晚了,感谢您的回答。我要更新代码,所以你可以看到我到目前为止做了什么。 (基本上我改变了 Ajax 部分,就像你们说的那样是一个 POST 动作)。 我想我没有很好地解释整个事情,这个数组必须通过提交表单发送,这个函数在“onSubmit”上调用(抱歉没有解释)。我开始意识到我在 php 的 $_POST 数组中没有一个名为“Family”的成员,因为我收到“找不到索引”的错误,所以,我在表单中隐藏了一个输入并以这种方式调用它NAME 属性。 尽管如此,我仍然在 php 端收到一个非数组之类的值,(实际上,当我回显它时,它会打印一个 (1))。 我开始考虑传递数组的其他方式,但这就是我首先使用 JS 和 ajax 的原因。 我怀疑 "xhttp.send('Family=' + 数组);"部分......它真的在 $_POST 数组的索引 ['Family'] 上发布数组吗?我想知道。 也许作为值传递的数组被表单的输入覆盖(实际上提交时没有值)
******************************编辑,再次************************ ************************
更改了代码,并且运行良好。(将 Cast 添加到 Array 对象)
$Family = (Array)json_decode( $_POST['Family']);
【问题讨论】:
-
在循环之前,如果你要打印出 $Family 的内容,你会得到什么?即:
print_r( $Family );如果将true添加到json_decode,它会生成一个数组作为输出而不是stdClass对象 -
@RamRaider 我尝试打印变量 $Family,但它似乎根本没有显示任何内容。我在 jason decode 中添加了 true 作为参数,但 $Family 似乎也没有获得任何价值。
-
您正在 $_POST 中查找您的数据,但通过 $_GET 发送。
-
Vanilla javascript 不是我的专长,但在我看来,这里:
var Array = encodeURIComponent( JSON.stringify( Family) );您正在尝试将变量命名为“数组”,而这里:xhttp.send( 'Family=' + Array );您正在尝试使用该变量作为数组。如果这确实是您正在做的事情,那么使用“Array”作为变量名是个坏主意,因为“Array”已经是一个内置的 javascript 对象,具有它自己的一组属性。可能与您的错误无关,我可能误读了您的代码,但仍然觉得值得指出。 -
很高兴指出。我会重命名它。
标签: javascript php arrays ajax