通过POST方法将JavaScript数组发送到PHP

8
我正在尝试通过POST将JavaScript数组发送到PHP文件。
JS:
var songlist = ['song1', 'song2', 'song3'];

var sendData = function(){
    var data = songList.join(',')
    $.post('test.php', {data: data}).always(function() {
        window.location = 'test.php';
    });
}
sendData();

test.php:

<?php
$songData = $_POST['data'];
$songData = explode(',', $songData); 
print_r(array_values($songData));
?>

当sendData();将我重定向到test.php时,我收到以下提示:
“注意:未定义索引:数据”
为什么当我尝试打印或使用data变量时它没有任何值?

我不确定,但是尝试使用 $_POST->data。也许这是一个对象,因为您将其发送到脚本时像对象一样发送,而不是数组。 - kalit
2个回答

8

那不是POST请求的工作方式。了解更多关于Ajax的内容,但现在,你应该这样做。

var songlist = ['song1', 'song2', 'song3'];

var sendData = function() {
  $.post('test.php', {
    data: songlist
  }, function(response) {
    console.log(response);
  });
}
sendData();
// test.php
<?php
$songData = $_POST['data'];
print_r($songData);
?>


这个解决方案正是我所想的,无需将数组转换为字符串。 - Abanoub Makram

5

1) $.post('url') - 使用$.post()方法进行Ajax请求,您提供的"testing.php"是无效的URL。

2) window.location = 'test.php' - 用于重定向到特定页面,您已经重定向到没有任何参数/数据的'test.php'。这就是为什么它显示"注意:未定义索引:data"

3) 尝试了解Ajax的工作原理。请遵循以下步骤:

var songlist = ['song1', 'song2', 'song3'];

var sendData = function() {
  $.post('test.php', {
    data: songlist
  }, function(response) {
    console.log(response);
  });
}
sendData();
// test.php
<?php
if(isset($_POST)){
    if(isset($_POST['data'])){
    $songData = $_POST['data'];
    print_r($songData);
}}
?>

1
谢谢,控制台中的响应是有效的,但我如何查看它是否已打印到 test.php 而不使页面重定向到该文件? - Damien Stewart
1
不用客气。如果你想将值打印到test.php中进行测试,那么就不需要使用ajax。只需使用以下重定向代码:var data = songList.join(','); window.location =“test.php?data =”+ data; 然后在你的php脚本中使用explode()函数从字符串中获取数组即可。 - AGM Tazim

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