如何通过ajax从javascript发送和检索数组

如何通过ajax从javascript发送和检索数组,javascript,php,arrays,ajax,Javascript,Php,Arrays,Ajax,我有一个javascript中的2d数组,我需要插入数据库,所以我需要通过ajax将其发送到php 我在stackoverflow上尝试了针对类似问题的不同解决方案,我能够通过它们解决我的错误,但无法在php文件中获得正确的数据 我有一个javascript代码,其中包含一个数组 Arr_记录=[]; 此数组在从其他数组(var_ItemDetails)单击“添加”按钮时填充。(由于Arr_记录中的数据设置非常完美,因此该功能运行良好) 我在javascript中定义了另一个按钮函数OnChec

我有一个javascript中的2d数组,我需要插入数据库,所以我需要通过ajax将其发送到php

我在stackoverflow上尝试了针对类似问题的不同解决方案,我能够通过它们解决我的错误,但无法在php文件中获得正确的数据

我有一个javascript代码,其中包含一个数组 Arr_记录=[]; 此数组在从其他数组(var_ItemDetails)单击“添加”按钮时填充。(由于Arr_记录中的数据设置非常完美,因此该功能运行良好)

我在javascript中定义了另一个按钮函数OnCheckOutClick,从这里我需要将Arr_记录中的记录插入mysql数据库,因此我一直在尝试ajax将其发送到insert.php文件,但无法成功接收Arr_记录的数据

<script>
var Arr_Records = [];
var indx = 0;

// This function is setting records in Arr_Records from another array. Its working fine (indx was initialized with 0).
function OnAddItemClick()
{
Arr_Records.push([
    var_ItemDetails.Id, 
    var_ItemDetails.Item, 
    var_ItemDetails.CategoryId, 
    var_ItemDetails.Category, 
    var_ItemDetails.Price, 
    var_ItemDetails.AvbQty,
    var_ItemDetails.PurQty,
    var_ItemDetails.RemQty, 
    var_ItemDetails.TotalPrice
]);


alert(Arr_Records[indx][1]); // only to confirm insertion
indx++; 

OnClearClick(); // to clear input fields.
}

function OnCheckOutClick()
{        
 var ajax = new XMLHttpRequest();
 var method = "POST";
 var url = "insertdata.php";
 var async = true;

 ajax.open(method, url, async);    
 ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 ajax.send(JSON.stringify(Arr_Records));
 ajax.onreadystatechange =  function()
 {
    if(this.readyState == 4 && this.status == 200)
    {
        var response_Data = ajax.responseText;
        alert(response_Data);
    }
 }    

}
</script>


// **** insertdata.php ****

<?php

$arrRecords = filter_input_array(INPUT_POST, 'Arr_Records');

$arrRecords = json_decode($arrRecords); 

if ( $arrRecords != null )
 echo $arrRecords[0][1];
else
  echo "No Data Found";   // this line executes  

?>

var Arr_记录=[];
var-indx=0;
//此函数用于设置来自另一阵列的Arr_记录中的记录。其工作正常(indx已用0初始化)。
函数OnAddItemClick()
{
Arr_Records.push([
var_ItemDetails.Id,
var_ItemDetails.Item,
var_ItemDetails.CategoryId,
var_ItemDetails.Category,
var_ItemDetails.Price,
var_ItemDetails.AvbQty,
var_ItemDetails.PurQty,
var_ItemDetails.RemQty,
var_ItemDetails.TotalPrice
]);
警报(Arr_记录[indx][1]);//仅用于确认插入
indx++;
OnClearClick();//清除输入字段。
}
函数OnCheckOutClick()
{        
var ajax=new-XMLHttpRequest();
var method=“POST”;
var url=“insertdata.php”;
var async=true;
open(方法、url、异步);
setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
send(JSON.stringify(Arr_记录));
ajax.onreadystatechange=函数()
{
if(this.readyState==4&&this.status==200)
{
var response_Data=ajax.responseText;
警报(响应数据);
}
}    
}
//****insertdata.php****

我希望在insertdata.php中有正确的数组receive,这样我就可以访问我在OnAddClick中设置的所有项目,如要插入mysql的itemid、item、category等。

使用jquery for ajax,如下所示:

$.ajax({
type: 'POST',
url: 'insert.php',
data: {
   Arr_Records:{
         "id":var_ItemDetails.Id,
         ...
    }
},
success: function(msg){
    alert('data sent' + msg);
}
});'
在您的php insert.php中

我不知道发送到那里的数据是什么var_dump$\u POST并检查数据 在我的例子中,在php中应该是这样的

$array_record = $_POST["Arr_Records"];
$id = $array_record['id'];

javascript-ajax函数需要发送有效负载数据,其中包含可以在PHP中捕获的字段名(例如$\u POST['payload'])PHP需要使用
filter\u input
而不是
filter\u input\u array
来过滤数据-不分配实际的过滤器等同于根本不过滤-因此使用
filter\u SANITIZE\u STRING

<script>

    var Arr_Records = [];
    var indx = 0;

    // This function is setting records in Arr_Records from another array. Its working fine (indx was initialized with 0).
    function OnAddItemClick(){
        Arr_Records.push([
            var_ItemDetails.Id, 
            var_ItemDetails.Item, 
            var_ItemDetails.CategoryId, 
            var_ItemDetails.Category, 
            var_ItemDetails.Price, 
            var_ItemDetails.AvbQty,
            var_ItemDetails.PurQty,
            var_ItemDetails.RemQty, 
            var_ItemDetails.TotalPrice
        ]);
        indx++; 

        OnClearClick();
    }



    function OnCheckOutClick(){
        var payload=JSON.stringify( Arr_Records );
        var ajax = new XMLHttpRequest();
            ajax.onreadystatechange =  function(){
                if( this.readyState == 4 && this.status == 200 ){
                    alert( this.response );
                }
            }
            ajax.open( 'POST', 'insertdata.php', true );
            ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            /* send the data as the value of a named parameter / post field */
            ajax.send( 'payload='+payload );
    }
</script>




<?php

    /* insertdata.php */
    if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['payload'] ) {

        $data = filter_input( INPUT_POST, 'payload', FILTER_SANITIZE_STRING );
        $json = json_decode( $data ); 

        if( empty( json_last_error() ) ){
            echo $json[0][1];

        } else {
            echo 'No Data Found';
        }
    }
?>

var Arr_记录=[];
var-indx=0;
//此函数用于设置来自另一阵列的Arr_记录中的记录。其工作正常(indx已用0初始化)。
函数OnAddItemClick(){
Arr_Records.push([
var_ItemDetails.Id,
var_ItemDetails.Item,
var_ItemDetails.CategoryId,
var_ItemDetails.Category,
var_ItemDetails.Price,
var_ItemDetails.AvbQty,
var_ItemDetails.PurQty,
var_ItemDetails.RemQty,
var_ItemDetails.TotalPrice
]);
indx++;
OnClearClick();
}
函数OnCheckOutClick(){
var payload=JSON.stringify(Arr_记录);
var ajax=new-XMLHttpRequest();
ajax.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
警惕(这是一种反应);
}
}
open('POST','insertdata.php',true);
setRequestHeader('Content-type','application/x-www-form-urlencoded');
/*将数据作为命名参数/post字段的值发送*/
send('payload='+payload);
}

我认为问题在于这里
$arrRecords=filter\u input\u array(input\u POST,'Arr\u Records')-第二个参数应该是带有相应筛选器的字段名数组。尝试
$arrRecords=filter_input(input_POST,'Arr_Records')insteadData正在php文件中接收。但不知道它是否没有像在else块中一样正确地将其解码到数组中。它现在工作正常。我已删除参数过滤器\u清理\u字符串。