Проблема AJAX / PHP / Jquery с обратным вызовом

#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 для процесса и возвращаемое значение, если таковое имеется, не уверен, где вы видите, что данные не определены.