Ajax - проблема с ответом внутри div - PullRequest
1 голос
/ 01 июня 2019

Я пытаюсь показать значение ответа ajax внутри div.Ajax. Проблема возникает, когда я получаю ответ. Ответ отображается в div только на долю секунды и скрывается автоматически. Я пытался изменить идентификатор класса, но ошибка все еще сохраняется. Предупреждение отображается правильно при тестировании. Что мне не хватает? У меня есть следующий код в моем файле просмотра.

Div:

<div id="result"></div>

Ajax:

 $(document).ready(function() {
 $('#submit').click(function() {

 $.ajax
 ({
  type:'post',
  cache: false,
  url:'save.php',
  data: $("#action").serialize(),
  dataType: "html",

 success: function(response) {

if(response == 'success')
{
    alert('success');
}
if(response == 'empty')
{
    alert('empty');

}
if(response == 'bad')
{
     $("#result").html(response);

}
}

 });
});
});

save.php:

<?php
$co= 'aaa';

if(!empty($_POST['tosave']))
{

    if($_POST['tosave'] == $co)
{
    $foo = fopen("plik.txt","a+");

            flock($foo, 2);
            fwrite($foo,$_POST['tosave']."\r\n");
            flock($foo ,3);
            fclose($foo);
echo "success";
exit();
} else {

    echo 'bad';
    exit;
}

} else {

echo "empty";
exit;

}
?>

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Прежде всего, в вашем Ajax-вызове коде есть ошибка, которую вы написали для submit.click() функции отправки в document.ready() .remove document.ready(), потому что submit.click() будет запускаться при отправке формы , Во-вторых, вы должны добавить event.preventDefault(), чтобы предотвратить поведение по умолчанию вашей формы отправки, в противном случае она будет отображаться в течение короткого времени, а затем исчезнет. См. Мой код ниже, он работает.

AJAX с HTML-формой:

 <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>

    <form id="action">
        <input type="text" name="tosave" value="bbb">
        <button type="submit">clickme</button>>
    </form>

    <div id="result"></div>
    </body>
    </html>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
    <script type="text/javascript">

        $("#action").click(function(event) {
        event.preventDefault();//TO PREVENT THE DEFAULT BEHAVIOUR OF FORM
     $.ajax
     ({
      type:'post',
      cache: false,
      url:'https:save.php',
      data: $("#action").serialize(),
      dataType: "html",

     success: function(response) {

    if(response == 'success')
    {
        alert('success');
    }
    if(response == 'empty')
    {
        alert('empty');

    }
    if(response == 'bad')
    {
         $("#result").html(response);

    }
    }

     });
    });



    </script>

PHP:

<?php
$co = 'aaa';

if (!empty($_POST['tosave'])) {

    if ($_POST['tosave'] == $co) {
        $foo = fopen("plik.txt", "a+");

        flock($foo, 2);
        fwrite($foo, $_POST['tosave'] . "\r\n");
        flock($foo, 3);
        fclose($foo);
        echo "success";
        exit();
    } else {

        echo 'bad';
        exit;
    }

} else {

    echo "empty";
    exit;

}
?>
**OUTPUT DISPLAY IN DIV: bad**
0 голосов
/ 01 июня 2019

Это может быть связано с тем, что вы не запрещаете поведение по умолчанию для кнопки отправки, которая заключается в отправке данных формы по указанной ссылке, возможно, в вашем случае ссылка находится на той же странице, что и ваш PHP, что приводит только к просмотрусообщение в div за доли секунды до перезагрузки страницы.

Поэтому, чтобы предотвратить это поведение по умолчанию, вы должны перехватить событие и использовать функцию protectDefault () следующим образом:

$('#submit').click(function(event) { //we pass the event as an attribute
event.preventDefault(); //we prevent its default behavior so we can do our own stuff below
 $.ajax
 ({
  type:'post',
  cache: false,
  url:'save.php',
  data: $("#action").serialize(),
  dataType: "html",

 success: function(response) {

    if(response == 'success')
    {
       alert('success');
    }
    if(response == 'empty')
    {
       alert('empty');

    }
    if(response == 'bad')
    {
        $("#result").html(response);

    }   
}

  });
 });
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...