2015-08-08 2 views
0

У меня есть страница администратора, которая может вставлять, обновлять и удалять данные. Я хочу показать простой загрузочный gif при выполнении любой из этих операций. Все 3 операции работают отлично, но когда я пытаюсь сделать с ним Ajax, он перестает работать.Обновление данных при загрузке Ajax не работает

Ниже приведен мой код Ajax. Этот код просто показывает div, который имеет загрузочный gif внутри него, сразу после отправки формы и, если он успешно завершен, скрывает его снова. Это просто.

$("#form").submit(function(e) { 
    e.preventDefault(); 

    $("#loading").show(); 

    $.ajax({ 
     url: "Operations.php", 
     dataType: "HTML", 
     success: function() { 
      $("#loading").hide(); 
     } 
    }); 
}); 

Теперь Operations.php, что выполняется любой форме, содержит 3 операции с базами данных. Он сохраняет имя класса, отправленного полем hidden, получает значение от button представленной формы и в зависимости от его значения создает экземпляр ServiceDatabase, передающий класс и выполняющий одно действие.

$class = filter_input(INPUT_POST, "class"); 
$id = filter_input(INPUT_POST, "id"); 

@require_once "../../php/Connection.php"; 
@require_once "../../php/ServiceDatabase.php"; 
@require_once "../../php/" . $class . ".php"; 

$Operation = new ServiceDatabase($connection, new $class); 

switch ($_REQUEST["submit"]) { 
    case "insert": 
     $Operation->setPostVariables(); 
     $Operation->insert(); 
     break; 
    case "update": 
     $Operation->setPostVariables(); 
     $Operation->update($id); 
     break; 
    case "delete": 
     $Operation->delete($id); 
     break; 
} 

И, наконец, только форма.

<form id="form" class="center-block" action="Operations.php" method="post"> 
    <h3>Alterar - <small><?php echo $class ?></small></h3> 

    <input type="hidden" value="<?php echo $class ?>" name="class"/> 
    <input type="hidden" value="<?php echo $id ?>" name="id"/> 

    <?php echo $Table->generateAdminTables($id); ?> 

    <button type="submit" name="submit" value="update" class="btn btn-success btn-update">Atualizar</button> 
</form> 

Что происходит в том, что операции с базой данных, в этом случае обновление, не работает, как если бы она не доходит до файла Operations.php.

+0

Я не думаю, что вы вставляете данные в любом месте. – BlackCetha

+0

Я не хочу ничего вставлять, просто выполните 'update()', в то время как мой 'div' с загружаемым GIF внутри виден. – mfgabriel92

+0

Может быть 'success: function()'. Если я правильно помню, вам нужно было указать два параметра в функции. – BlackCetha

ответ

0

Похоже, $_REQUEST не работает с Ajax. Какой сюрприз.

Мое решение: Я создал новый hidden в формах, чтобы получить с помощью JQuery в value из щелкнули button:

btnValue = ""; 
$("#form button").click(function() { 
    btnValue = $(this).attr("value"); 
}); 

Тогда прямо перед $.ajax, я поставил hidden значение:

$(this).find("#action").attr("value", btnValue); 

В моем Operations.php получено новое значение $_POST

$action = filter_input(INPUT_POST, "action"); 

И в switch блоке, я просто проверить $action

switch ($action) { 
    case "insert": ... 
    case "update": ... 
    case "delete": ... 
} 

работал отлично.

0

Вам необходимо установить данные POST, которые вы получите из формы.

$.ajax({ 
    url: "Operations.php", 
    method: "POST", // defaults to get 
    data: $(this).serialize(), // get the form data and send it 
    dataType: "HTML", 
    success: function() { 
     $("#loading").hide(); 
    } 
}); 
+0

Извините, но это не сработало. Когда я пишу код Ajax, даже если он возвращает сообщение «success» параметром 'textStatus'' success', метод 'update()' не выполняется, но если я удалю Ajax, он будет работать. Кажется, что что-то блокирует выполнение. – mfgabriel92

+0

Можете ли вы использовать отладчик браузеров, чтобы увидеть, что отправляется в качестве почтовых переменных в двух случаях. 1) с использованием ajax. 2) не использовать ajax? – Victory

+0

Я никогда не использовал этот отладчик, я пока ничего не понимаю. Не могу сказать разницы. Я не понимаю, почему это происходит, чего там нет. У меня есть другая форма, которая отправляет электронное письмо с Ajax, и все работает отлично. – mfgabriel92

0

Попробуйте этот. Я не тестировал, но он будет работать.

$("#form").submit(function (e) { 
    e.preventDefault(); 

    $("#loading").show(); 

    $.ajax({ 
     url: "Operations.php", 
     dataType: "HTML", 
     success: function() { 
      $("#loading").hide(); 
     }, 
     error: function (data) { 
     }, 
     complete: function (data) { 
      $("#loading").hide(); 
      //A function to be called when the request finishes 
      // (after success and error callbacks are executed). 
     } 
    }); 
}); 
+0

Спасибо, но я уже решил свою проблему, и вскоре я пометю свое решение как ответ. – mfgabriel92

Смежные вопросы