【问题标题】:Issue transferring data from ajax to PHP将数据从 ajax 传输到 PHP 的问题
【发布时间】:2019-08-29 12:41:37
【问题描述】:

我正在尝试将键值对的关联数组从客户端(javascript)发送到服务器(php)。数组的大小或值不固定。需要将用户选择的选项从一个页面转发到另一个页面。不使用表格

尝试使用 ajax,但 php 没有正确接收数组。使用php7、jquery 2.4.1、sql server、javascript

javascript/jquery

var contributeArr = {};
$(document).on("change", ".contribute_txt", function() {
    // some other code
    contributeArr[this.id] = this.value;
});

$('#contri_submit').click(function(e) {
    e.preventDefault();
    var error = false; 
    var contributeArray = JSON.stringify(contributeArr);
    var url = 'chapter.php';            
    var formData = new FormData();
    if (error == false) { 
        formData.append("contributeArray", contributeArray); 
    }
    else { 
        console.log("Something went wrong. Check your code."); 
    }

    for (var pair of formData.entries()) {
        console.log(pair[0]+ ', ' + pair[1]); 
    }

    $.ajax({
        type: "POST",
        url: url,
        data: formData,
        cache: false,
        processData: false,
        contentType: false,
        success: function(result) {
            window.setTimeout(function() {
                window.location.href = url;
            }, 2000);
        },error: function(xhr,request,error) {
            alert(error);
        }
    });
    return false; 
});

php

foreach ($_POST['contributeArray'] as $key => $value) {
    $_SESSION['contribution'][$key] = $value;
}
print_r($_SESSION['contribution']);
print_r($_POST);

来自控制台日志的样本数据:

contributeArray, {"LECH":"10","MASC":"20","PMEM":"30","LVME":"50"}

【问题讨论】:

  • "php 没有正确接收数组" 你是如何检查的?请提供样本数据、当前结果和预期结果。
  • 和往常一样...一旦您接受用户输入的信息并将其传递给服务器...您是否正在验证您的数据以确保安全?
  • 你有没有使用浏览器的开发者工具查看AJAX的请求/响应?
  • 在尝试foreach 之前,您是否确定$_POST['contributeArray'] 已被解码为一个数组?
  • 你为什么要先做JSON.stringifyformData 的东西?只需将contributeArr 直接传递给带有data: contributeArr 的帖子即可

标签: javascript php jquery sql-server ajax


【解决方案1】:

注意:不确定 // some other code 是什么...假设您的所有内容都正确无误

并假设您正在验证您的 $_POST 数据...

var contributeArr = {};
$(document).on("change", ".contribute_txt", function() {
    // some other code
    contributeArr[this.id] = this.value;
});

$('#contri_submit').click(function(e) {
    e.preventDefault();
    var my_url_value = 'chapter.php';
    var real_url_to_ajax_app = 'https://realdomain.com/realfile.php';

    $.ajax({
        type: "POST",
        url: real_url_to_ajax_app,
        data: contributeArr,
        success: function(result) {
            window.setTimeout(function() {
                window.location.href = my_url_value;
            }, 2000);
        },error: function(error) {
            console.log(error);
        }
    });
    return false; 
});

在您的 PHP 中:

// assuming you are initializing $_SESSION['contribution'] per your needs

foreach ($_POST as $key => $value) {
    // validate key/value here
    $_SESSION['contribution'][$key] = $value;
}

echo 'some helpful response';

exit; // required

【讨论】:

  • 这里没有理解“real_url_to_ajax_app”。响应需要转到的 URL 是“chapter.php”,那么拥有另一个 url 有什么意义
  • @Rohan 因为 ajax.url 必须是将处理它的服务器端 PHP 的完整 URL……它不只是存储一些值……它是发布 AJAX 的地方到
  • 您确认您甚至在服务器上收到了 AJAX 帖子吗?接收未正确处理的数据是一回事......完全不接收数据是另一回事
  • also...error var set by ajax error 在发布时是最有帮助的(imo)...这就是为什么我将错误重新编码为第一个返回的 var 和 console.log相反... error 输出是什么?这将使事情缩小很多...
  • 没有收到任何错误。我已经尝试过您建议的解决方案,但服务器上没有响应。我收到一个对象作为响应,但 php 无法读取它。试过 print_r($_POST);没有产生任何结果。
【解决方案2】:

请使用 json_decode 并包含最新的 jQuery。

如果你还没有解决,我可以解决你的代码

【讨论】:

  • 已经尝试过 json_decode 和最新的 jquery。所有解决方案都在这里,而不是寻求任何专业服务。谢谢。
  • 可能还有其他问题,但我已经尝试并修改了您的代码,并且运行良好
猜你喜欢
  • 2014-03-06
  • 2019-11-16
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2020-06-03
  • 2015-05-18
相关资源
最近更新 更多