1

我正在尝试使用 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]

谁能解释发生了什么以及为什么它似乎与一个代码块一起工作而不是另一个?

谢谢!

克里斯

更新:可能值得一提的是,初始链接('#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);
   }

不幸的是,我不明白这意味着什么。任何人都可以对此有所了解吗?

更新 3好的,我找到了 Ajax 对我大发雷霆的原因,它与更新 1(上图)有关。基本上因为链接是文件下载(.docx 文件),它似乎导致了 ajax 的问题。当我将链接更改为,href='#'而不是href="document.docx",ajax 和 PHP 脚本工作。

当然,这引发了一个新问题——如何在更新数据库的同时获取下载文件的链接?

4

1 回答 1

1

指定 adataType并用于console调试数据响应。

另外,请注意error回调包含以下参数,而不是任何“数据”;

错误类型:函数(jqXHR jqXHR,字符串 textStatus,字符串 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 注入。

于 2013-03-13T11:16:47.940 回答