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

时间:2016-02-25 16:13:37

标签: 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_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响应&#34;未定义索引&#34;但在请求部分它显示&chaID=7&row_number=2&tag=6所以它应该工作。

也许我对php做错了什么?

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

此外,是否还能正确混合formData +数据?

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

response screenshot

request

EDIT2 --------------------------------------- --------------------

问题是,如果我删除

它会起作用
            contentType: false,
            processData: false

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

3 个答案:

答案 0 :(得分:3)

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

根据我对jQuery如何附加GET参数的理解,修复将是

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

如果这还没有解决,请尝试检查控制台是否有错误,或尝试console.log值。另外,请确保在将这些值放入网址之前重新encodeURI

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

您可以在此处找到jQuery和EncodeURI的AJAX函数的文档: http://api.jquery.com/jquery.ajax/

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

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

data = [chaID, row_number, tag];

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

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

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

EDIT3:这应该有效。只需以这种方式修改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'];

答案 1 :(得分:1)

因为你把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 [&#39; chaid&#39;]并且没有定义另一个$ _POST变量。

答案 2 :(得分:1)

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

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

替换为:

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

还可以使用print_r($_POST);

检查php中的值