我想通过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 +数据?
编辑。浏览器控制台的屏幕截图EDIT2 --------------------------------------- --------------------
问题是,如果我删除
它会起作用 contentType: false,
processData: false
但问题是如果我删除它也无法通过URL传递var formData
输入:文件。我该怎么办?
答案 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);