首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义索引:通过AJAX传递PHP变量

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

Stack Overflow用户
提问于 2016-02-25 16:13:36
回答 3查看 1.2K关注 0票数 1

我想用这样的方式通过AJAX发送我的php变量和输入文件。

代码语言:javascript
复制
$(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做错了什么?

代码语言:javascript
复制
$chaID = $_POST['chaID'];
$row_number = $_POST['row_number'];
$tag = $_POST['tag'];

另外,是否可以正确地混合formData +数据?

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

反应截图

请求

EDIT2

问题是,如果我把

代码语言:javascript
复制
            contentType: false,
            processData: false

但问题是,如果我删除它也不能传递var formData输入:文件通过网址。我该怎么办?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-25 16:20:01

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

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

代码语言:javascript
复制
'?chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag

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

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

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

encodeURI.asp

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

代码语言:javascript
复制
data = [chaID, row_number, tag];

将一个数组传递给数据参数,它应该会很好地发布值。另外,尝试在你的问题中包括控制台网络选项卡的屏幕截图,它告诉我们是否出了问题。也是控制台截图。

EDIT2:好的,下面是我的观察: ProcessData将处理对象,因此formData不能工作是有意义的。试着追加另一个数组:

代码语言:javascript
复制
data = [chaID, row_number, tag];
for (var i = 0; i < formData.length; i++) {
    data.append('formData[]', formData[i]);
}

EDIT3:这应该可以用。只需用以下方式修改PHP和JS:

代码语言:javascript
复制
  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:

代码语言:javascript
复制
$chaID = $_GET['chaID'];
$row_number = $_GET['row_number'];
$tag = $_GET['tag'];
票数 3
EN

Stack Overflow用户

发布于 2016-02-25 16:23:58

因为您将php变量放入脚本中。和php首先编译您的代码--您的javascript运行:

代码语言: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变量没有定义。

票数 1
EN

Stack Overflow用户

发布于 2016-02-25 16:55:55

如果在ajax中使用$_POST方法,则不需要使用&启动param数据。

代码语言:javascript
复制
var data = '&chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag;

替换为:

代码语言:javascript
复制
var data = 'chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag;

还检查php中的值,您通过使用print_r($_POST);得到了什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35632588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档