我想通过 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);
你会得到什么