未定义索引:通过AJAX传递的PHP变量

Undefined Index : PHP variables passing by AJAX

本文关键字:PHP 变量 AJAX 索引 通过 未定义      更新时间:2023-09-26

我想通过 AJAX 发送我的 php 变量和输入文件,如下所示..

$(document).ready(function(){
    $("#submit").click(function(){ 
        //var formData = new FormData($('form#data')[0]);
        var chaID = "<?php echo $chaID; ?>";
        var row_number = "<?php echo $row_number; ?>";
        var tag = "<?php echo $tag; ?>";
        var data = '&chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag;
        //Returns successful data submission message when the entered information is stored in database.
        $.ajax({
            type: "POST",
            url: "ajax_challenge.php",
            data : data,
            cache: false,
            success: function(result){
                $('#level').modal('show');
            },
            contentType: false,
            processData: false
        });

        return false;
    });
});

我的formData工作正常,所以让我们专注于var data。当我运行此函数时,ajax_challenge.php响应"未定义的索引",但在请求部分中它显示&chaID=7&row_number=2&tag=6所以它应该可以工作。

也许我在 php 上做错了什么?

$chaID = $_POST['chaID'];
$row_number = $_POST['row_number'];
$tag = $_POST['tag'];

此外,是否有任何方法可以正确混合表单数据+数据?

编辑 . 浏览器控制台的屏幕截图

响应屏幕截图

请求

编辑2 -----------------------------------------------------------

问题是,如果我删除

            contentType: false,
            processData: false

但问题是如果我删除它也无法通过 URL 传递var formData输入:文件。我应该怎么做?

我想我明白发生了什么,你把 GET 参数错误地传递给了数据变量。

根据我对jQuery如何附加GET参数的理解,解决方法是

'?chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag

如果这不能解决问题,请尝试检查控制台是否存在错误或尝试console.log值。此外,请确保在将值放入 URL 之前encodeURI这些值。

此外,更好的做法是使用 GET 值创建一个数组并将它们传递给 jQuery.ajax() 函数的数据变量,因为它会自动为您进行字符串转换,请尝试这样做,它可能只是解决问题。 ;)

你可以在这里找到jQuery和EncodeURI的AJAX函数的文档:http://api.jquery.com/jquery.ajax/

http://www.w3schools.com/jsref/jsref_encodeURI.asp

编辑:我注意到您正在使用POST方法,在这种情况下,然后将发布值数组传递给数据参数,它应该可以工作。但是,仅包含变量值。示例数组:

data = [chaID, row_number, tag];

将数组传递给 data 参数,它应该可以很好地发布值。此外,请尝试在您的问题中包含控制台网络选项卡的屏幕截图,该选项卡告诉我们是否出了问题。还有一个控制台屏幕截图。

编辑2:好的,这是我的观察:ProcessData将处理对象,因此formData不起作用是有道理的。尝试附加其他数组:

data = [chaID, row_number, tag];
for (var i = 0; i < formData.length; i++) {
    data.append('formData[]', formData[i]);
}

编辑3:这应该有效。只需以这种方式修改您的 PHP 和 JS:

  var data = formData;
  var params = $.param({"chaID": chaID, "row_number": row_number, "tag": tag});

//Returns successful data submission message when the entered information is stored in database.
$.ajax({
type: "POST",
url: "ajax_challenge.php?" + params,
data : data ,

和 PHP:

$chaID = $_GET['chaID'];
$row_number = $_GET['row_number'];
$tag = $_GET['tag'];

因为你把 php 变量放到你的脚本中。php 首先编译你的代码,然后运行你的 JavaScript:

var chaID = "<?php echo $chaID; ?>";
    var row_number = "<?php echo $row_number; ?>";
    var tag = "<?php echo $tag; ?>";
    var data = '&chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag;

因此,您没有单击 $_POST['chaID'] 和另一个 $_POST 变量未定义。

如果您在 ajax 中使用$_POST方法,则无需使用 & 启动参数数据

var data = '&chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag;

替换为:

var data = 'chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag;

还要检查 php 中的值,通过使用print_r($_POST);你会得到什么