【问题标题】:Pass JS array to PHP via Ajax通过 Ajax 将 JS 数组传递给 PHP
【发布时间】:2020-04-01 04:07:30
【问题描述】:

我在 javascript 中有一个数组,我需要将它转换为 PHP 数组。所以我有这个代码,我也尝试了其他代码,但没有一个有效。 代码如下:

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
	<div id="res" style="border: 1px solid black; width: 400px; height: 200px;"></div>
	<br>
	<input type="file" name="img[]" id="img" multiple>
	<input type="submit" name="submit" id="submit">
	<script>
		var array = new Array();
		$('#img').change(function() {
			var img = $('#img').val().split('\\').pop();
			array.push(img);
			document.getElementById('res').innerHTML = array;
		});
		$('#submit').click(function() {
			var send_data = JSON.stringify(array);
			$.ajax({
				type: "POST",
				enctype: "multipart/form-data",
				url: "test.php",
				data: {send_data:send_data},
				datatype: "JSON",
				success: function(data) {
				}
			});
		});
	</script>
</body>
</html>

还有我的 test.php

<?php 
$data = $_POST['send_data'];
$decoded = json_decode($data, true);
var_dump($decoded);
?>

【问题讨论】:

  • 错误是什么?...
  • @AlbertoSinigaglia 代码不会从 PHP 代码返回数组
  • 尝试在请求之前登录浏览器控制台中数组中的内容

标签: javascript php jquery ajax


【解决方案1】:

HTML && Javascript 示例代码:

function validateForm() {
let formData = {
        'name': $('input[name=name]').val(),
        'email': $('input[name=email]').val(),
        'message': $('textarea[name=message]').val()
    };
    //Prevent page from refresh after sending message (ajax)
    $.ajax({
        url: "./assets/php/contact_me.php",
        type: "POST",
        data: formData,
        success: function (data, textStatus, jqXHR) {
            if (data.code)
                $('#status').text(data.message);
        },
        error: function (jqXHR, textStatus, errorThrown) {
            $('#status').text("Error");
        }
    });
}
<a class="btn" onclick="validateForm()">Send Message</a>

<!-- Status text -->
<div id="status" class="text-danger pb-2"></div>

PHP 代码:

<?php

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

header('Content-Type: application/json');
if (strlen($name) < 3){
    print json_encode(array('message' => 'Name is too short', 'code' => 0));
    exit();
}
if ($email === ''){
    print json_encode(array('message' => 'Email cannot be empty', 'code' => 0));
    exit();
} else {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        print json_encode(array('message' => 'Email format invalid.', 'code' => 0));
        exit();
    }
}
if (strlen($message) < 5){
    print json_encode(array('message' => 'Message is too short', 'code' => 0));
    exit();
}
print json_encode(array('message' => 'successfull!', 'code' => 1));
exit();

【讨论】:

  • 这不是我真正需要的。我可以传递变量,但我需要传递一个数组
  • 在上面的例子中,“formData”是一个数组,我们正在发送它。
  • @Matarata formData 是一个对象而不是数组。
  • @JuniusL。是的。一切都是对象,但更具体的是它的数组类型对象。对吗?
【解决方案2】:

我在 javascript 中有一个数组,我需要将其转换为 PHP 数组。

您可以在POST-ing 之前将一个javascript 数组(称为myDataAsJSArray)转换为JSON 字符串:

let myDataAsJSON = JSON.stringify('myDataAsJSArray');

POST-ing之后,可以将JSON字符串转换成PHP数组

$My_Data_As_PHP_Array = json_decode($_POST['myDataAsJSON'], TRUE);

请注意,如果您忽略上面的可选 TRUE 参数,PHP 会将您的 JSON 转换为 PHP 对象,而不是 PHP 数组。


进一步阅读:

【讨论】:

  • 这和我做的一样。但这不起作用!
  • 抱歉,我可能误解了您的问题 - 您是否停留在客户端和服务器之间的实际数据传输上,而不是在两种语言之间传递数据?
  • 是的。你告诉我的方式曾经是最受欢迎的方式之一。我试过了,但没有结果。
  • 好的,看。我想建立一个管理面板。为此,我需要输入多个图像文件,然后编写一些内容,然后添加一些图像等等。因此,在此之后,我想将所有名称附加到一个数组中,然后将该数组传递到 PHP 文档中,并将所有这些图像上传到一个文件夹中。现在我只需要将 js 数组传入 PHP
  • 是的,我就是这个意思。我想在客户端和服务器之间传输数据
猜你喜欢
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2012-08-27
相关资源
最近更新 更多