通过Ajax将JS数组传递到PHP

3

我有一个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);
?>


什么错误? - Alberto Sinigaglia
@AlbertoSinigaglia 的 PHP 代码没有返回数组。 - user11264446
尝试在浏览器控制台中记录请求之前数组中的内容。 - Alberto Sinigaglia
2个回答

0

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();

这不是我真正需要的。我可以传递变量,但我需要传递一个数组。 - user11264446
在上面的示例中,“formData”是一个数组,我们正在发送它。 - Mostafa Fahimi
2
@Matarata formData 是一个对象而不是数组。 - Junius L
@JuniusL。是的,一切都是对象,但更具体地说,它是数组类型的对象。 - Mostafa Fahimi
1
请查看 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array. - Junius L

0
我在JavaScript中有一个数组,需要将其转换为PHP数组。
在进行POST之前,您可以将JavaScript数组(称为myDataAsJSArray)转换为JSON字符串:
let myDataAsJSON = JSON.stringify('myDataAsJSArray');

POST 后,您可以将 JSON 字符串转换为一个 PHP 数组

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

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

更多阅读:


这是我之前做的方式,但是它不起作用! - user11264446
抱歉,也许我误解了你的问题 - 你是卡在客户端和服务器之间的实际数据传输上,而不是在两种语言之间传递数据吗? - Rounin
是的。你告诉我的方法是最受欢迎的之一。我已经尝试过了,但没有结果。 - user11264446
好的,我想要建立一个管理面板。为此,我需要输入多个图像文件,然后编写一些内容,添加一些图像等等。因此,在此之后,我想将所有名称附加到一个数组中,然后将该数组传递到PHP文档中,并将所有这些图像上传到一个文件夹中。现在,我只需要将js数组传递到PHP即可。 - user11264446
1
是的,我就是这个意思。我想在客户端和服务器之间传输数据。 - user11264446

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接