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

Javascript 未定义索引:通过AJAX传递的PHP变量,javascript,php,ajax,variables,Javascript,Php,Ajax,Variables,我想通过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_numbe

我想通过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和data的方法

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

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

问题是,如果我移除

            contentType: false,
            processData: false

但问题是,如果我删除了它,它也无法通过URL传递var formData input:file。我该怎么办?

我想我知道发生了什么,你把GET参数传递给了数据变量

从我对jQuery如何附加获取参数的理解来看,解决方法是

'?chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag
如果这不能解决问题,请尝试检查控制台是否有错误,或者尝试将值记录到console.log中。还要确保在将值放入URL之前对其进行编码

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

您可以在这里找到jQuery和EncodeURI的AJAX函数文档:

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

data = [chaID, row_number, tag];
将一个数组传递给数据参数,它应该可以很好地传递值。此外,请尝试在您的问题中包括console network(控制台网络)选项卡的屏幕截图,它会告诉我们是否出现了问题。还有一个控制台屏幕截图

EDIT2:好的,以下是我的观察结果:ProcessData将处理对象,因此formData不工作是有意义的。尝试附加其他数组:

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

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

我想我知道发生了什么,你把GET参数传错了数据变量

从我对jQuery如何附加获取参数的理解来看,解决方法是

'?chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag
如果这不能解决问题,请尝试检查控制台是否有错误,或者尝试将值记录到console.log中。还要确保在将值放入URL之前对其进行编码

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

您可以在这里找到jQuery和EncodeURI的AJAX函数文档:

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

data = [chaID, row_number, tag];
将一个数组传递给数据参数,它应该可以很好地传递值。此外,请尝试在您的问题中包括console network(控制台网络)选项卡的屏幕截图,它会告诉我们是否出现了问题。还有一个控制台屏幕截图

EDIT2:好的,以下是我的观察结果:ProcessData将处理对象,因此formData不工作是有意义的。尝试附加其他数组:

data = [chaID, row_number, tag];
for (var i = 0; i < formData.length; i++) {
    data.append('formData[]', formData[i]);
}
和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;

因此,您没有单击,$\u POST['chaID'],并且没有定义另一个$\u POST变量。

,因为您将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;
因此,您没有单击,$\u POST['chaID'],并且没有定义另一个$\u POST变量。

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

替换为:

还要检查php中的值,使用print\u r$\u POST可以得到什么

如果在ajax中使用$\u POST方法,则无需使用启动param data&

替换为:


还要检查php中的值,使用print\u r$\u POST可以得到什么

您在浏览器控制台中查看过AJAX请求/响应吗?您好@JayBlanchard,是的,我已经查看过了响应一直显示未定义的索引,但请求显示了&chaID=7&row_number=2&tag=6,所以这并不意味着它已经更正了值?您只需要更改这个“&chaID=”+chaID+”&row_number=“+row_number+”&tag=”+tag;在这个“?chaID=”+chaID+”&行数=“+行数+”&标记=“+标记;您没有有效的post数据。请将这些PHP变量放入隐藏的表单字段中,这些字段将由FormData、@JayBlanchard Hey It request?chaID=2&row\u number=3&tag=7立即获取,但仍然不起作用。\uuuu。您是否在浏览器控制台中观看了AJAX请求/响应?您好@JayBlanchard,是的,我看过了,响应一直显示未定义的索引,但请求显示&chaID=7&row_number=2&tag=6,所以这并不意味着它已经更正了值?只需更改此“&chaID=”+chaID+”&row_number=”+row_number+”&tag=”+tag;在这个“?chaID=”+chaID+”&行数=“+行数+”&标记=“+标记;您没有有效的post数据。请将这些PHP变量放入hid
den表单字段,该字段将由FormData、@JayBlanchard Hey It request?chaID=2&row\u number=3&tag=7立即提取,但仍然不起作用。这是正确的,除非脚本所在的文件是一个.php文件,在输出之前先进行解释。在这种情况下(通常是这种情况),注意开头标记,这个理论是不正确的。这是正确的,除非脚本所在的文件是一个.php文件,它在输出之前首先得到解释。在这种情况下,也就是通常的情况,注意开头的标签,这个理论是不正确的。好吧,我试着制作数组。我修正了语法,但仍然没有work@devpro哦,我没有注意到他是在发布而不是获取,在这种情况下,它必须是一个强制性的值数组。如果OP想使用$\u GET而不仅仅是添加?正如我在回答中提到的,无论怎样,努力都是好的。。。兄弟,投赞成票u@devpro非常感谢,我会纠正错误的answer@SergioE.Diaz我已经编辑并加入了截图,请看一看。我还是很好,我会尝试制作数组。我修正了语法,但仍然没有work@devpro哦,我没有注意到他是在发布而不是获取,在这种情况下,它必须是一个强制性的值数组。如果OP想使用$\u GET而不仅仅是添加?正如我在回答中提到的,无论怎样,努力都是好的。。。兄弟,投赞成票u@devpro非常感谢,我会纠正错误的answer@SergioE.Diaz我已经编辑并加入了截图,请看一看。我还是stuckI用你的语法替换了它。print\r也未定义。@nongkantt nitchkant将此类型:POST更改为方法:POST,我将其替换为您的语法。print\r也未定义。@Nongkantt Nitchkant将此类型:POST更改为方法:POST,