簡體   English   中英

阿賈克斯電話工作; 不再工作

[英]Ajax Call Worked; Doesn't Work Anymore

我在頁面上有一個AJAX呼叫供管理員進行電子簽名。 當按下按鈕(adminEsign_btn)時,此jQuery稱為:

$("#adminEsign_btn").click(function(e){//admin esign submitted
  e.preventDefault();
  //validate esign
  var valid = true;
  if($.trim($('#adminSignature').val()).length < 3){
     valid = false;
  }
  //action
  if(valid === false){
     $('#adminEsignError').html('<span class="error">You must agree to the statement and sign.</span>');
  }
  else{//validation passed, submit data
     var schoolID = <?php echo $schoolProfile['schoolID']; ?>;
     var signature = $('#adminSignature').val();
     $('#adminEsignLoader').css({'display':'inline-block'});
     $('#submitForm').attr("disabled","disabled");
     $('#submitForm').val("Updating...");
     $.ajax({
        type: "POST",
        url: 'bin/schoolProfile.saveEsign.php',
        data: { schoolID:schoolID, signature:signature}
     }).done(function(response) {
        //$('#debug').html(response);
        //alert(response);
        if(response.indexOf('success') >= 0){//if 'success' exists in the response text
           $('#submitForm').removeAttr("disabled");
           $('#submitForm').val("Update School Profile");
           $('#adminEsignLoader').hide();
           //disable the e-sign
           $('#adminAgree').attr("disabled","disabled");
           $('#adminSignature').attr("readonly","readonly");
           $('#adminEsign_btn').attr("disabled","disabled");
        }
     });
     $('#adminEsignError').html('');
  }
});

我沒有編寫原始代碼,所以我不知道if語句到底發生了什么:

if(response.indexOf('success') >= 0){//if 'success' exists in the response text

但是,除了成功的呼聲外,電話會議並不期望回報。 以下php頁面(schoolProfile.saveEsign.php)稱為:

<?php
include($_SERVER['DOCUMENT_ROOT'] . '/includes/init.php');
$Page->clearance('Admin');

$Main->saveSchoolAdminEsign($_POST['schoolID'], $_POST['signature']);

echo 'success';
?>

注意:$ Main以及$ Page都在init.php中初始化。

直到今天我再次對其進行測試時,該代碼一直有效。 應該將數據發布到schoolProfile.saveEsign.php並運行一個將schoolID和簽名保存到mysql數據庫的函數。

我已經使用javascript alert()函數發布了“響應”的結果,它始終顯示整個當前頁面的代碼(schoolProfile.edit.php)。

我已經在Chrome中運行了代碼,它顯示了數據正在發布。 狀態為302-找到。 大小為485 B(聽起來很合理,只有2個變量為純文本),但Chrome Network Debugger中的大小在下面,內容為content,內容為0 B-空。 我不知道這是否意味着沒有發送數據或什么。

我已經測試過設置一個Session變量,以查看是否保存了該會話,並且我無法更改其值,因此這可能表明該數據實際上並未被推送。 但是,當我查看被調用頁面的標題時,它顯示了兩個帶有值的變量-schoolID和signature。

我是Chrome Network Debugger的新手,所以如果我可以檢查其他任何事情,或者任何人有任何建議,我們將不勝感激。

編輯:我也測試了ajax調用內的成功和錯誤函數,並且總是調用成功。 再次,它僅返回當前頁面的整個代碼(schoolProfile.edit.php)。

我發現了問題。 在我的include($_SERVER['DOCUMENT_ROOT'] . '/includes/init.php'); 如果用戶尚未完成填寫學校資料,則init.php文檔會將用戶重定向到schoolProfile.edit.php,並且使用PHP的$_SERVER['REQUEST_URI']來確保用戶尚未到達該網址。

問題是,當嘗試調用schoolProfile.saveEsign.php時,此URL不在正常URL的“列表”中,因此AJAX請求始終被重定向到schoolProfile.edit.php-也就是當前頁面。 這就是為什么我發出警報時總是看到當前頁面代碼的原因。

供我將來參考。 原始代碼:

if($_SERVER['REQUEST_URI'] != '/settings/schoolProfile.edit?f='.$Main->encrypt("INCOMPLETE")) {
   header("Location:/settings/schoolProfile.edit?f=".$Main->encrypt("INCOMPLETE"));
   exit();
}

固定代碼:

if($_SERVER['REQUEST_URI'] != '/settings/schoolProfile.edit?f='.$Main->encrypt("INCOMPLETE")
   && $_SERVER['REQUEST_URI'] != '/settings/bin/schoolProfile.saveEsign'
   && $_SERVER['REQUEST_URI'] != '/settings/bin/schoolProfile.saveEsign.php') {
  header("Location:/settings/schoolProfile.edit?f=".$Main->encrypt("INCOMPLETE"));
  exit();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM