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]

何が起こっているのか、なぜコードの 1 つのブロックでは機能するように見えるのに、他のブロックでは機能しないのかを説明できる人はいますか?

ありがとう!

クリス

更新:('#downloadtable a')最初のリンクが実際にファイルのダウンロードと 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

を指定しdataTypeて使用consoleし、データ応答をデバッグします。

errorまた、コールバックには次の引数が含まれており、「データ」は含まれていないことに注意してください。

エラータイプ: 関数( 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 クエリの作成に使用している値をエスケープすることをお勧めします。

于 2013-03-13T11:16:47.940 に答える