#php #jquery #ajax #callback
#php #jquery #ajax #обратный вызов
Вопрос:
Кажется, я не могу понять, почему это не сработает. Я удалил все элементы и преобразовал это в базовый пример. может кто-нибудь, пожалуйста, сказать мне, что я делаю не так. Когда я нажимаю на кнопку на html-странице, я получаю свое первоначальное предупреждение, но никогда не получаю предупреждение от моих обратных вызовов.
Вот код для моего HTML-файла. test.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="http://code.jquery.com/jquery-1.5.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function()
{
$("#test").click(function()
{
alert("!st");
$.ajax({
type : 'POST',
url : 'test_ajax.php',
dataType : 'json',
data: {
email : 'Jeremy'
},
success : function(data){
alert(data.msg);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert("error");
}
});
return false;
});
});
</script>
</head>
<body>
<input name="test" id="test" type="button" value="Click Me"/>
<div id="results">
Hello
</div>
</body>
</html>
Теперь для php: test_ajax.php
<?php
if (empty($_POST['email'])) {
$return['error'] = true;
$return['msg'] = 'You did not enter you email.';
}
else {
$return['error'] = false;
$return['msg'] = 'You've entered: ' . $_POST['email'] . '.';
}
echo json_encode($return);
?>
Пожалуйста, любая помощь была бы высоко оценена.
Спасибо, Джереми
Комментарии:
1. Вы можете устранить любую проблему с AJAX-запросом с помощью Firebug: getfirebug.com
2. Можете ли вы опубликовать ответ в формате JSON?
3. Можем ли мы увидеть ответ JSON? Я уверен, что у вас есть, но просто убедитесь, что у вас есть начальный
<?php
тег в вашем php-файле.
Ответ №1:
Код выглядит чистым. Попробуйте использовать буферизацию php. Поместите ob_start()
в самое начало PHP-файла и в код
// cleans the buffer
ob_clean();
echo json_encode($return);
die();
Комментарии:
1. Я попытался добавить ob_start и ob_clean. По-прежнему нет результатов от обратных вызовов.
2. пожалуйста, используйте этот Firefox Firebug или дайте нам URL для проверки запроса.
Ответ №2:
Я только что попробовал точный код, и он работает нормально. Вы пропустили открывающие php скобки ( <?php
) из приведенного выше кода, но было ли это просто ошибкой?
Комментарии:
1. Что вы получили в результате, когда нажали кнопку
2. Я получил возврат поля электронной почты … Т.е. ‘Jeremy’
3. Возможно ли, что сервер не поддерживает PHP? Если вы перейдете к test_ajax.php непосредственно с файлом, что он возвращает? Должен вернуться… {«ошибка»: true, «сообщение»: «Вы не ввели свой адрес электронной почты».}
Ответ №3:
Я думаю, вы пропустили открытие php-файла и объявление $return в виде массива. Я попробовал это, и это работает нормально:
<?
$return = array();
if (empty($_POST['email'])) {
$return['error'] = true;
$return['msg'] = 'You did not enter you email.';
}
else {
$return['error'] = false;
$return['msg'] = 'You've entered: ' . $_POST['email'] . '.';
}
echo json_encode($return);
?>
Комментарии:
1. есть ли вероятность, что это может быть проблема на стороне клиента. Я пробовал firefox, safari и ie
2. Не уверен. Я тестировал с FF3.6 и IE9.0, оба работают нормально, возвращая
{"error":false,"msg":"You've entered: Jeremy."}
. Вы могли бы проверить это с помощью Firebug console.3. Проверьте, используя полный открывающий тег php
<?php
. Возможно, ваш сервер не разрешает короткий вызов.4. Извините, ваша консоль должна отображать вызов ajax для процесса и возвращаемое значение, если таковое имеется, не уверен, где вы видите, что данные не определены.