Как я могу "прочитать" ответ из php-файла, который я здесь называю, используя ajax? - PullRequest
4 голосов
/ 22 ноября 2010

Я очень плохо знаком с ajax и jquery, но в Интернете я наткнулся на код, которым я манипулирую в соответствии со своими потребностями.

Единственная проблема заключается в том, что я хочу иметь возможность отвечать на запросы.ajax из PHP.

Этот ajax ПРЕДСТАВЛЯЕТ на страницу php (email.php).

Как я могу заставить email.php отвечать обратно, если сообщение отправлено или если лимит сообщения равенпревышен (я ограничиваю количество сообщений, отправляемых каждому пользователю)?

Другими словами, я хочу, чтобы ajax взял 1 или 0 из кода php, например:

  if(response==1){ alert("message sent"); } else { alert("Limit exceeded"); }

Вот последняя часть кода: (Если вам нужен полный код, просто дайте мне знать)

var data_string = $('form#ajax_form').serialize();

$.ajax({
    type:       "POST",
    url:        "email.php",
    data:       data_string,
    success:    function() {

    $('form#ajax_form').slideUp('slow').before('');
    $('#success').html('<h3>Success</h3>Your email is has been sent.');
    }//end success function
}) //end ajax call

 return false;

 })

Спасибо

Ответы [ 6 ]

6 голосов
/ 22 ноября 2010

Функция success вызова $.ajax получает параметр, обычно называемый data, хотя это зависит от вас и содержит ответ, поэтому:

success: function(data) {
    // Use the data
}

(Он также получает несколько других параметров, если вы хотите их; больше в документах .)

Тип параметра data будет различаться в зависимости от типа содержимого ответа, отправляемого вашей страницей PHP. Если он отправляет HTML, data будет строкой, содержащей разметку HTML; если ваша страница отправляет JSON , параметр data будет декодированным объектом JSON; если это XML, data будет экземпляром документа XML.

Вы можете использовать 1 или 0, если хотите (если вы это сделаете, я бы, вероятно, установил тип содержимого "text / plain"), поэтому:

success: function(data) {
    if (data === "1") {
        // success
    }
    else if (data === "0") {
        // failure
    }
    else {
        // App error, expected "0" or "1"
    }
 }

... но когда я отвечаю на запросы Ajax, в девяти случаях из десяти я отправляю JSON назад (поэтому я устанавливаю заголовок Content-Type на application/json), потому что тогда, если я использую такую ​​библиотеку, как jQuery, который понимает JSON, я верну хороший упорядоченный объект, с которым легко работать. Я не PHP-парень, но я полагаю, что вы установите тип контента с помощью setContentType и будете использовать json_encode для кодирования данных для отправки обратно.

В вашем случае я бы, вероятно, ответил:

{"success": "true"}

или

{"success": "false", "errMessage": "You reached the limit."}

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

success: function(data) {
    var msg;

    if (typeof data !== "object") {
        // Strange, we should have gotten back an object
        msg = "Application error";
    }
    else if (!data.success) {
        // `success` is false or missing, grab the error message
        // or a fallback if it's missing
        msg = data.errMessage || "Request failed, no error given";
    }
    if (msg) {
        // Show the message -- you can use `alert` or whatever
    }
}
2 голосов
/ 22 ноября 2010

Вы должны передать аргумент своей функции "success".

success: function(data)
{
    if(data == '1')
    {
        $('form#ajax_form').slideUp('slow').before('');
        $('#success').html('<h3>Success</h3>Your email is has been sent.');
    }
}

И в вашем php-файле вы должны просто повторить нужный вам ответ

if(mail())
{
    echo '1';
}
else
{
    echo '0';
}
1 голос
/ 22 ноября 2010

Все, что вы видите или возвращаете в php-файле, будет отправлено вам обратно в jquery post. Вы должны проверить эту страницу http://api.jquery.com/jQuery.post/ и подумать об использовании отформатированных переменных JSON для возврата, как если бы это было в вашем сценарии электронной почты:

echo '{"reposonse": "1"}';

Эта переменная, называемая response со значением 1, возвращается обратно в сценарий jquery. Затем вы можете использовать оператор if, как вы описали.

0 голосов
/ 22 ноября 2010

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

Если бы ваш PHP-файл был чем-то вроде,

<?php
echo "1";
?>

Вы бы получили "1" вВаш успешный обратный вызов JavaScript,

, то есть

success: function(data) {
   // here data is "1"
}

Как примечание, обычно ответы AJAX обычно делаются в формате JSON .Поэтому вы должны отформатировать ответы PHP в формате JSON.

0 голосов
/ 22 ноября 2010

что вы делаете, вы позволяете вашему ajax-файлу (email.php) печатать 1, если успешно, и 0, если нет (или все, что вы хотите)

Затем, в своей функции успеха, вы делаете что-то вроде этого:

функция (данные) {

$('form#ajax_form').slideUp('slow').before('');
if(data==1){ alert("message sent"); } else { alert("Limit exceeded"); }
$('#success').html('<h3>Success</h3>Your email is has been sent.');
}

Таким образом, вы фиксируете ответ в переменной данных функции. Если у вас больше различий в выводе, вы можете установить для dataType значение «json», и ваш php-файл напечатает строку json_encoded, чтобы вы могли получить доступ к различным переменным в вашем ответе, например, через data.success и т. Д.

0 голосов
/ 22 ноября 2010

только что email.php отображает 0 или 1, а затем получает данные в событии успеха объекта ajax следующим образом:

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