我正在尝试使用jQuery Ajax将数据发送到PHP脚本。由于某种原因,Ajax请求抛出一个错误,并从PHP脚本返回以下数据- [object Object]
我在下面复制了我的代码。我也复制了代码使用完全相同的方法在页面的其他地方似乎工作得很好!
有人能解释一下为什么会这样吗?
首先,运行良好的代码
jQuery $("#reqtable a").click(function(){
var cells = [];
var name;
var account;
var module;
var email;
$(this).parent().parent().find("td").each(function(){
cells.push($(this).html());
});
$(this).parent().parent().find("input").each(function(){
email = $(this).val();
});
$(this).parent().parent().prop('id', 'die');
name = cells[0];
account = cells[1];
module = cells [2];
$.ajax({
url: "release.php",
type: "POST",
data: {name: name, account: account, module: module, email: email},
success: function(){
$("#die").remove();
}
});
});
PHP <?php
include('../../dbconnect.php');
$name = $_POST['name'];
$account = $_POST['account'];
$email = $_POST['email'];
$module = $_POST['module'];
$releasequery = "INSERT INTO release_assignment(name, account, email, module) VALUES ('$name', '$account', '$email', '$module')";
$release = $conn->query($releasequery);
$erasequery = "DELETE FROM request_assignment WHERE email='$email' AND module = $module";
$erase = $conn->query($erasequery);
?>
现在的代码是不工作。
jQuery $("#downloadtable a").click(function(){
var dlcells = [];
var dlname;
var dlaccount;
var dlmodule;
var dlemail;
var dlsub;
var dlpath;
$(this).parent().parent().find("td").each(function(){
dlcells.push($(this).html());
});
$(this).parent().parent().find("input.dlemail").each(function(){
dlemail = $(this).val();
});
$(this).parent().parent().find("input.dlsub").each(function(){
dlsub = $(this).val();
});
$(this).parent().parent().find("input.dlpath").each(function(){
dlpath = $(this).val();
});
$(this).parent().parent().prop('id', 'die2');
dlname = dlcells[0];
dlaccount = dlcells[1];
dlmodule = dlcells [2];
$.ajax({
url: "download.php",
type: "POST",
data: {dlname: dlname, dlaccount: dlaccount, dlmodule: dlmodule, dlemail: dlemail, dlsub: dlsub, dlpath: dlpath},
success: function(data){
$("#die2").remove();
},
error: function(data){
$('#downloaddiv').html('<p>' + data + '</p>');
}
});
});
PHP <?php
include('../../dbconnect.php');
$name = $_POST['dlname'];
$email = $_POST['dlemail'];
$account = $_POST['dlaccount'];
$module = $_POST['dlmodule'];
$path = $_POST['dlpath'];
$submission = $_POST['dlsub'];
$feedbackquery = "INSERT INTO feedback_assignments(name, email, level, unit, assignmentpath, submission) VALUES ('$name', $email, '$account', '$module', '$path', '$submission')";
$feedback = $conn->query($feedbackquery);
$erasequery = "DELETE FROM uploaded_assignments WHERE email='$email' AND unit = $module";
$erase = $conn->query($erasequery);
?>
当我注释掉所有PHP代码并简单地输入echo ($_POST['dlname']);
时它返回数据[object Object]
谁能解释发生了什么,为什么它似乎与一个代码块工作,而不是另一个?
谢谢!
克里斯Update:可能值得一提的是,初始链接('#downloadtable a')
实际上激活了文件下载和ajax调用,而在正在工作的代码中,它只是进行ajax调用,没有其他操作。我不知道这是不是在捣乱,但我觉得值得一提。
更新2:使用jQuery Ajax错误回调如下所述,我得到以下响应:
{"readyState":0,"responseText":"","status":0,"statusText":"error"}
AJAX error: error :
我在错误回调中使用的代码如下:
error: function(jqXHR, textStatus, errorThrown) {
console.log(JSON.stringify(jqXHR));
console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
}
遗憾的是我不明白这是什么意思。有人能解释一下吗?
Update 3好了,我找到了Ajax让我抓狂的原因,它与更新1(上面)有关。基本上,因为链接是一个文件下载(一个.docx文件),它似乎导致了ajax的问题。当我改变链接到href='#'
而不是href="document.docx"
, ajax和PHP脚本工作。
这抛出了一个新的问题,当然-我怎么能得到下载文件的链接,同时更新数据库?
指定dataType
并使用console
来调试您的数据响应。
另外,请注意error
回调包含以下参数,而不是任何"data";
error Type: Function(jqXHR jqXHR, String textStatus, String errorThrown)
目标文件download.php
可能抛出异常。可能是因为$email
周围的一些引号在行;
$feedbackquery = "INSERT INTO feedback_assignments(name, email, level, unit, assignmentpath, submission) VALUES ('$name', $email, '$account', '$module', '$path', '$submission')";
调试download.php
并确保它生成预期的输出/响应。
我建议你转义你用来构建SQL查询的值,以防止SQL注入。