У меня есть страница http://visiting/blog
.
Контроллер содержит методы action_index и add_index. Action_index()
возвращает страницы индексов. Add_index()
метод модели вызова add_data()
, который вставляет данные из формы в базу данных.
Мне нужно организовать мое приложение с помощью ajax-запроса, чтобы страница http://visiting/blog
не обновлялась после отправки формы.
ПОСМОТРЕТЬ
$.ajax({ type: 'POST', url: '???', --------------------------> What should URL contain? data: $(this).serialize()
КОНТРОЛЛЕР
function action_add() { $title = $this->cleanStr($_POST["title_field"]); $text = $this->cleanStr($_POST["text_field"]); if ($title!="" && $text!="") { $this->model->add_data($title, $text); } else { throw new Exception("Data is empty"); } }
МОДЕЛЬ
public function add_data($title, $text) { try { $query="INSERT INTO post (title, text) VALUES('$title', '$text')"; self::$db->query($query); } catch(Exception $e) { echo $e->getMessage(); } }
ПОСМОТРЕТЬ
Это полный html-файл с ajax-запросом. Я хочу обработать форму, что страница не обновляется, и данные отправляются в базу данных.
<div class="blog"> <h1> Blog </h1> <form onsubmit="return validate()" id="add_form"> <fieldset> <legend>Add new post:</legend> <label>Title:</label><br> <input type="text" name="title_field" id="titlef"> <br> <label>Text:</label> <br> <textarea name="text_field" id="textf"></textarea> <br> <input onclick="return validate(); return false" type="submit" value="Submit"> <input onclick="return resetclass()" type="reset" value="Reset"> </fieldset> </form> <div class="blogposts"> <div id='response'></div> <?php foreach ($data as $values) { echo "<div class=\"blog_item\">"; echo "<h4 class=\"blog_item_title\">" . $values["title"] . "</h4>" . "<div class=\"blog_item_text\">" . $values["text"] . "</div>" . "<div class=\"blog_item_time\">" . $values["time"] . "</div>"; echo "</div>"; } ?> </div> </div> <script> $(document).ready(function(){ $('#add_form').submit(function(){ // show that something is loading $('#response').html("<b style=\"font-size:20px; margin:40px;\"\">Loading ...</b>"); $.ajax({ type: 'POST', url: '???', ------------> What should be into url? data: $(this).serialize() }) .done(function(data){ // show the response $('#response').html(data); }) .fail(function() { // just in case posting your form failed alert( "Posting failed." ); }); // to prevent refreshing the whole page page return false; }); }); </script>
url должен быть путь к вашему методу контроллера, который вы хотели бы поразить. вам не нужно включать базовый путь в URL-адрес (но вы можете, если хотите). так что-то вроде:
url: "howeverYourStructureIs/Action_index",
ударить метод action_index (). Вы можете думать о ajax как «как если бы вы попали на страницу, но на самом деле не перешли на эту страницу». Таким образом, однако, вы обычно нажимаете этот метод, это URL-адрес, который вы вводите в вызов ajax.
надеюсь это поможет