Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t通过AJAX将多维数组从JavaScript发送到PHP_Javascript_Php_Arrays_Ajax - Fatal编程技术网

Can';t通过AJAX将多维数组从JavaScript发送到PHP

Can';t通过AJAX将多维数组从JavaScript发送到PHP,javascript,php,arrays,ajax,Javascript,Php,Arrays,Ajax,我看到了很多关于同一件事的问题。但我尝试了很多东西,我真的不确定我所做的是否还能用 所以,我有一个多维数组,我通过一个html表循环创建它,我想把它发送到PHP,这样我就可以循环它,并创建我需要的对象来将它存储在数据库中 但当我尝试通过for each循环PHP时,我从PHP得到的只是“警告:为foreach()提供的参数无效” 先谢谢你。我想我在这里真的被绊倒了,因为我不熟悉PHP、JS和AJAX,一切似乎都奇迹般地发生了。(我真的说不出我的做法是否正确。) 我希望我说得够清楚,如果我能澄清什

我看到了很多关于同一件事的问题。但我尝试了很多东西,我真的不确定我所做的是否还能用

所以,我有一个多维数组,我通过一个html表循环创建它,我想把它发送到PHP,这样我就可以循环它,并创建我需要的对象来将它存储在数据库中

但当我尝试通过for each循环PHP时,我从PHP得到的只是“警告:为foreach()提供的参数无效”

先谢谢你。我想我在这里真的被绊倒了,因为我不熟悉PHP、JS和AJAX,一切似乎都奇迹般地发生了。(我真的说不出我的做法是否正确。) 我希望我说得够清楚,如果我能澄清什么,请告诉我

--------------------------------------****--------------------------------------

编辑:我很抱歉迟了回复,谢谢你的回答。我将更新代码,这样你就可以看到我到目前为止做了什么。(基本上我改变了Ajax部分,就像你们说的那样成为后期动作)。 我想我没有很好地解释整个事情,这个数组必须通过提交表单发送,这个函数是在“onSubmit”上调用的(很抱歉没有解释)。我意识到我在php的$u POST数组中没有一个名为“Family”的成员,因为我得到了一个错误“Index not found”,所以我在表单中隐藏了一个输入,并在NAME属性中以这种方式调用它。 尽管如此,我还是在php端不断地接收到一个类似于数组的值(实际上,当我回显它时,它会打印一(1))。 我开始考虑传递数组的另一种方式,但这就是我首先使用JS和ajax的原因。 我怀疑这一点 “xhttp.send('Family='+Array);”部分。。。我想知道,它是否真的将数组发布在$\u POST数组的索引['Family']上。 可能作为值传递的数组被表单的输入覆盖(实际上,表单提交时没有值)

*************************再次编辑*****************************************

更改了代码,工作正常。(将强制转换添加到数组对象)


我不是一个本地JavaScript专家(在AJAX方面我更喜欢jQuery之类的东西),但从我在您的代码中所读到的内容来看,您不会在PHP端收到预期的POST数据。看着你的ajax调用,我看到了一些奇怪的东西:

xhttp.open("POST", "Worker.php&Family= " +  
   encodeURIComponent(JSON.stringify(Family)), true);
xhttp.send();
我看到您在GET请求中使用的是
&
而不是

如果我看这张照片,它会告诉我一些不同的东西:

xhttp.open("POST", "ajax_test.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");

尝试更改JavaScript代码以通过POST而不是GET发送数据。

昨晚我在发布初始注释时没有注意到您原始函数中的一些小错误,尽管其他人已经了解了它们并在上面传递了注释-该函数应该是通过
POST
发送的,但是
send()
方法中没有发送参数,只是像处理
GET
请求那样附加到url。另外,尽管我认为这不是很关键,但您没有为请求设置任何头,也没有回调函数

下面更改的代码确实按预期通过
POST

<script type='text/javascript'>
    /* callback function to handle response data */
    function cbReturnFamilyMembers( response ){
        alert( response )   
    }

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

        /* XHR headers to be set */
        var headers={
            'Content-type': 'application/x-www-form-urlencoded',
            'X-Requested-With': 'XMLHttpRequest'
        };
        var payload=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='+payload );
    }
</script>

/*处理响应数据的回调函数*/
函数cbReturnFamilyMembers(响应){
警报(响应)
}
函数ReturnFamilyMembers(){
var家族=[];
var Table=document.getElementById('FamilyTable');
var RowQuantity=Table.rows.length;
对于(变量i=0;i
它不再抱怨为每个数组传递了一个不正确的参数,实际上它似乎也将数组的内部铸造到父数组中,因为每个内部的嵌套都按预期工作


嗯,我对我在这件事上浪费的时间感到有点惭愧,但我感谢你们的帮助,我非常感激,事实上是你们的回答让我开始工作,(并通过$u POST发送数据).

在循环之前,如果要打印$Family的内容,您会得到什么?即:
print\r($Family)
如果将
true
添加到
json_decode
中,它将生成一个数组作为输出,而不是
stdClass
object@RamRaider我尝试打印变量$Family,但它似乎根本没有显示任何内容。我在jason decode中添加了true作为参数,但是$Family似乎也没有任何价值。你正在寻找你的da
xhttp.open("POST", "ajax_test.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");
<script type='text/javascript'>
    /* callback function to handle response data */
    function cbReturnFamilyMembers( response ){
        alert( response )   
    }

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

        /* XHR headers to be set */
        var headers={
            'Content-type': 'application/x-www-form-urlencoded',
            'X-Requested-With': 'XMLHttpRequest'
        };
        var payload=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='+payload );
    }
</script>
$Family =  (Array)json_decode( $_POST['Family']);