#php #jquery #ajax #json
#php #jquery #ajax #json
Вопрос:
Я практикуюсь в выполнении простых вызовов AJAX для localhost, но испытываю проблемы. Что я пытаюсь сделать, это отправить два значения формы текстового поля в PHP, а затем заставить его вернуть сообщение в пустой div в моей форме после успешного приема через AJAX. Мой test.php похоже на это:
<?php
$num = htmlentities(substr($_POST["num"], 0, 7), ENT_QUOTES);
$name = htmlentities(substr($_POST["name"], 0, 50), ENT_QUOTES);
$result = "'$num ' 'and' ' $name' ' values have been successfully AJAXd'";
echo json_encode($result);
jQuery:
$("#form").submit(function() {
event.preventDefault();
$("#msgcontainer").html("");
$.ajax({
url: "test.php",
data: ("#num").serialize(), ("#name").serialize(),
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json"
success: function(response) {
$("#msgcontainer").html(response);
}
});
}
Когда я пытаюсь отправить, страница просто перезагружается и добавляет значения формы к URL. Я пытаюсь решить эту проблему уже около дня, поэтому буду признателен за любую помощь.
Редактировать:
Я понял это, попробовав что-то из каждого ответа. Не уверен, почему это работает без сериализации… Если кто-то знает, пожалуйста, объясните. Рабочий код jQuery:
$("#form").submit(function(event) {
event.preventDefault();
$("#msgcontainer").html("");
$.ajax({
url: "test.php",
data: {
num: $("#num").val(),
name: $("#name").val()
},
type: "POST",
dataType: "json",
success: function(response) {
$("#msgcontainer").html(response);
}
});
});
Спасибо за помощь!
Комментарии:
1.
$result = "{$num} and {$name} values have been successfully AJAXd";
был бы правильный формат2. Не могли бы вы также поделиться HTML-кодом? Кстати, вы должны были видеть ошибки синтаксического анализа в консоли JavaScript.
Ответ №1:
Сразу бросаются в глаза две вещи:
data: ("#num").serialize(), ("#name").serialize(),
contentType: "application/json; charset=utf-8",
Первым должно быть это (при условии, что у вас есть два текстовых поля):
data: {
num: $('#num').val(),
name: $('#name').val()
},
И contentType:
строки там не должно быть, иначе у вас будет пустая $_POST
.
Наконец, event
должен быть аргумент функции, т.е.:
$("#form").submit(function(event) {
event.preventDefault();
// ...
Комментарии:
1. Это работает, но почему это работает без сериализации?
2. @user3361043 Когда вы передаете простой объект как
data:
jQuery выполнит сериализацию за вас.3. Я вижу. Итак, когда это необходимо?
4. Вы можете использовать
$(this).serialize()
для получения строки, которую затем можно передать с помощьюdata:
; это удобно, когда у вас есть несколько полей ввода и вам не требуется специальная обработка значений.
Ответ №2:
Ваш параметр данных в вашем вызове AJAX неверен, должно быть что-то вроде:
data: { num: $('#num').val() , name: $('#name').val() }
Ответ №3:
$("#form").submit(function() {
event.preventDefault();
event
нигде не определено. Я предполагаю, что вы имели в виду ...submit(function(event) {
.
Вы должны видеть ошибку в консоли JavaScript, сообщающую вам «событие не определено» или «TypeError: не удается прочитать свойство ‘preventDefault’ из undefined».
Ответ №4:
доброе утро,
Вы должны сериализовать всю форму, например:
$("#yourform").serialize();
Вместо того, чтобы просто по полю:
("#num").serialize(), ("#name").serialize()
Ответ №5:
Данные не отправляются должным образом. Рассмотрите возможность замены:
data: ("#num").serialize(), ("#name").serialize(),
С:
data: $(this).serialize(),
И затем вы можете отредактировать свой PHP
скрипт так, чтобы вы concatenate
использовали строки вместо summing
них.
Также передайте event
параметр или просто используйте следующее:
$("#form").submit(function() {
var event = arguments[0];
event.preventDefault();
....
});
Я сомневаюсь, что вам нужно contentType: "application/json; charset=utf-8",
!