传递 Javascript 数组 -> PHP

IT技术 php javascript jquery arrays
2021-01-29 17:26:08

假设我有一个包含一堆元素(从 50 到 200 的任何地方)的 javascript 数组。

我想使用 ajax 将它发送到 PHP(准备好的语句)。目前,我.load在循环内多次创建 php 文件,但我想将其转换为数组并发送一次数组,加载一次 PHP 文件而不是 50-200 次。

array[i] = variable;

5个回答

您可以使用JSON.stringify(array)JavaScript 对数组进行编码,然后$array=json_decode($_POST['jsondata']);在 PHP 脚本中使用来检索它。

您应该假设您的 PHP 脚本的任何输入都可能被恶意的人破坏。通过 运行您计划放入数据库查询中的任何变量mysql_real_escape_string(),以及将通过 放入屏幕的任何变量htmlentities()
2021-03-22 17:26:08
@Gareth 使用后JSON.stringify(array),是否必须将其插入到 JSON 对象文字中,例如datavar = { array: array}或者,你可以只通过array代替datavar你.getJSON()请求的参数?例如.get(script.php, array, function(data) {...此外,它总是jsondata在您的 $_POST 中吗?
2021-03-23 17:26:08
@Gnuey您可以这样做:.get(script.php, JSON.stringify(array), function(data{...然后使用 检索它$postvars=file_get_contents('php://input');$array=json_decode($postvars, true);,或者您可以使用:.get(script.php, {array: JSON.stringify(array)}, function(data{...使用检索它$array=json_decode($_POST['array'], true);
2021-03-25 17:26:08
只是为了确保,如果我有一个 $array 整数,stringify 也可以工作,并且在 SQL 查询中我需要将 $array(整数数组)与属性列中的整数匹配?我读到整数没有特别区分,但我只是想在这种情况下确定。
2021-03-29 17:26:08
不要忘记对您的输入进行消毒,否则您就是敬酒!:D
2021-04-07 17:26:08

AJAX 请求与通过<form>元素发起的 GET 和 POST 请求没有区别这意味着您可以使用 $_GET 和 $_POST 来检索数据。

当您发出 AJAX 请求时(jQuery 示例):

// JavaScript file

elements = [1, 2, 9, 15].join(',')
$.post('/test.php', {elements: elements})

它(几乎)等同于发布此表单:

<form action="/test.php" method="post">
  <input type="text" name="elements" value="1,2,9,15">
</form>

在这两种情况下,在服务器端,您都可以从 $_POST 变量中读取数据:

// test.php file

$elements = $_POST['elements'];
$elements = explode(',', $elements);

为了简单起见,我在这里用逗号连接元素。不过,JSON 序列化是一种更通用的解决方案。

我不知道为什么这不是被接受的答案,因为这正是 OP 所要求的并且不会引起麻烦,尤其是某些框架会自动为您爆炸 POST 数组
2021-03-31 17:26:08

这是一个将 js 数组或对象转换为与 php 兼容的数组作为 http get 请求参数发送的函数:

function obj2url(prefix, obj) {
        var args=new Array();
        if(typeof(obj) == 'object'){
            for(var i in obj)
                args[args.length]=any2url(prefix+'['+encodeURIComponent(i)+']', obj[i]);
        }
        else
            args[args.length]=prefix+'='+encodeURIComponent(obj);
        return args.join('&');
    }

prefix 是参数名称。

编辑:

var a = {
    one: two,
    three: four
};

alert('/script.php?'+obj2url('a', a)); 

会产生

/script.php?a[one]=two&a[three]=four

这将允许您使用 $_GET['a'] 作为 script.php 中的数组。你需要找到你最喜欢的 ajax 引擎,提供从 js 调用 script.php 的 url。

什么是any2url?
2021-03-30 17:26:08

因此,使用客户端循环来构建数组的二维数组,并在一个请求中将整个内容发送到 PHP。

服务器端,您需要有另一个循环来为每个子数组定期插入/更新。

@Switz 我假设您使用的data是 a$.get$.postcall参数
2021-03-30 17:26:08

您可以将数组从 javascript 传输到 PHP ...

Javascript... ArraySender.html

<script language="javascript">

//its your javascript, your array can be multidimensional or associative

plArray = new Array();
plArray[1] = new Array(); plArray[1][0]='Test 1 Data'; plArray[1][1]= 'Test 1'; plArray[1][2]= new Array();
plArray[1][2][0]='Test 1 Data Dets'; plArray[1][2][1]='Test 1 Data Info'; 
plArray[2] = new Array(); plArray[2][0]='Test 2 Data'; plArray[2][1]= 'Test 2';
plArray[3] = new Array(); plArray[3][0]='Test 3 Data'; plArray[3][1]= 'Test 3'; 
plArray[4] = new Array(); plArray[4][0]='Test 4 Data'; plArray[4][1]= 'Test 4'; 
plArray[5] = new Array(); plArray[5]["Data"]='Test 5 Data'; plArray[5]["1sss"]= 'Test 5'; 

function convertJsArr2Php(JsArr){
    var Php = '';
    if (Array.isArray(JsArr)){  
        Php += 'array(';
        for (var i in JsArr){
            Php += '\'' + i + '\' => ' + convertJsArr2Php(JsArr[i]);
            if (JsArr[i] != JsArr[Object.keys(JsArr)[Object.keys(JsArr).length-1]]){
                Php += ', ';
            }
        }
        Php += ')';
        return Php;
    }
    else{
        return '\'' + JsArr + '\'';
    }
}


function ajaxPost(str, plArrayC){
    var xmlhttp;
    if (window.XMLHttpRequest){xmlhttp = new XMLHttpRequest();}
    else{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
    xmlhttp.open("POST",str,true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send('Array=' + plArrayC);
}

ajaxPost('ArrayReader.php',convertJsArr2Php(plArray));
</script>

和 PHP 代码... ArrayReader.php

<?php 

eval('$plArray = ' . $_POST['Array'] . ';');
print_r($plArray);

?>