2013-09-16 2 views
2

У меня есть вызов AJAX на странице, где администраторы могут подписаться на e-sign. Когда кнопка (adminEsign_btn) нажата, это JQuery называется:Ajax Call Worked; Больше не работает

$("#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(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 инициализируется в init.php, а также составляет $ Page.

Этот код работал до сегодняшнего дня, когда я тестировал его снова. Предполагается, что данные будут опубликованы в schoolProfile.saveEsign.php и запустите функцию, чтобы сохранить идентификатор школы и подпись в базе данных mysql.

Я использовал функцию javascript alert(), чтобы опубликовать результаты «ответа» и всегда показывает код для всей текущей страницы (schoolProfile.edit.php).

Я запустил код в Chrome, и он показывает, что данные отправляются. Он имеет статус 302 - Найдено. Размер составляет 485 B (звучит разумно для двух переменных только с текстом), но под размером в Отладчике сети Chrome есть контент, а контент 0 B - пустой. Я не знаю, означает ли это, что данные не отправляются или что.

Я протестировал настройку переменной сеанса, чтобы узнать, сохраняется ли сеанс, и я не смог изменить его значение, поэтому это может быть признак того, что данные фактически не проталкиваются. Но когда я просматриваю заголовок для вызываемой страницы, он показывает 2 переменные - schoolID и подпись - со значениями.

Я новичок в отладчике сети Chrome, поэтому, если есть какие-либо другие вещи, которые я могу проверить или у кого есть какие-либо предложения, любая помощь будет оценена по достоинству.

EDIT: Я также проверял функции успеха и ошибки внутри вызова ajax, и успех всегда называется. Он снова возвращает весь код для текущей страницы (schoolProfile.edit.php).

+0

Ваш сервер работает нормально? –

+0

Да. У меня есть другие вызовы AJAX на других страницах, которые, похоже, работают нормально. Только этого нет. –

+0

Что дает вам: 'alert (response);'? –

ответ

0

Я нашел проблему. В моем include($_SERVER['DOCUMENT_ROOT'] . '/includes/init.php'); Документ init.php перенаправляет пользователя в schoolProfile.edit.php, если они не заполнили заполненный профиль школы, а также удостоверяются, что они еще не на этом URL-адресе, используя PHP $_SERVER['REQUEST_URI'].

Проблема заключалась в том, что при попытке вызвать schoolProfile.saveEsign.php этот URL-адрес не был включен в «список» okay'd-URL, поэтому запрос AJAX всегда перенаправлялся в schoolProfile.edit.php - AKA, текущий стр. Вот почему я всегда буду видеть текущий код страницы, когда буду делать предупреждение.

Для справки для себя в будущем. Оригинальный код:

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(); 
} 
Смежные вопросы