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