как обрабатывать AJAX резонансный текст с условиями - PullRequest
1 голос
/ 18 мая 2011

Я получил свою форму для публикации с помощью ajax, и все работает хорошо. Что касается ajax, он успешно обработал свою работу с помощью responseText. Но это не значит, что все правильно обработано в моем случае.

ajax публикует мою форму, которая запускает php-файл для вставки данных в мою базу данных. Успешно или неудачно, будет текст responseText, который либо скажет: «Спасибо», если все данные были вставлены в БД, либо «Err:», если это не удалось.

Как создать условие if из этого responseText для обработки такого рода пользовательской ошибки responseText? Или я могу заставить его вернуть .ajaxError () после responseText «Err:»?

HTML-форма:

<form method="post" action="contact.php" id="contact">
    <fieldset>
        <input type="text" id="email" class="required email" name="email"  maxlength="30" value="youremail @ example.com" />
        <input type="text" id="subject" class="required" name="subject" maxlength="24" value="Enter your subject" />
        <textarea id="msg" class="required textarea" name="msg" cols="30" rows="5">Reason for contact.</textarea>
        <input type="submit" class="formBtn" value="Punch me an Email" />
    </fieldset>
</form>

JQuery:

$(window).load(function(){
  $('#contact').ajaxForm({
        beforeSubmit:formValidate, 
        success: showResponse,
        clearForm:true
    }); 
});
function formValidate(){
    $('#contact').validate({
                rules:{
                    email:{required: true, email:true},
                    subject:{required: true, minlength: 5},
                    msg:{required: true, minlength: 50}
                },
                messages:{
                    email:'',
                    subject: '',
                    msg: ''
                },
                invalidHandler:function(){
                    $('div.error').hide();
                },
                focusInvalid:true,
                onfocusout:false,
                submitHandler: function() {
                    $('#contact').ajaxSubmit();
               }
            });
}
function showResponse(responseText,statusText,xhr,$form){
    console.log(responseText);
//    alert(responseText);
    // $("#contact").toggle('slow');
}

Ответы [ 4 ]

1 голос
/ 18 мая 2011

Раньше я возвращал 200 независимо от того, произошла ошибка или нет, и я возвращал код ошибки, возвращая различные строковые сообщения, но это не было хорошей практикой в ​​соответствии со структурами RESTful. Вот ссылка о том, что я имею в виду.

Итак, создание подходящего исключения в вашем серверном коде, похоже, лучшая практика.

бросить новое исключение ноль ");.

Когда это произойдет, ваш ajax-клиент получит ответ с Http Status Code (500). Jquery понимает и запускает событие ошибки (jqXHR, textStatus, errorThrown), используя этот код состояния (который равен 500 = внутренняя ошибка сервера), и он возвращает сведения о пользовательских исключениях.

Затем вы можете проанализировать эти 3 параметра и дать правильный ответ вашему клиенту.

1 голос
/ 18 мая 2011

Я бы предложил добавить свойство dataType: 'json' к вашему вызову $.ajaxForm.Тогда в вашем php вместо возврата «Спасибо» вы можете вернуть:

return json(array('status'=>'success'));

или

return json(array('status'=>'failed'));

Затем в show-response вы можете запустить что-то вроде:

if(responseText.status === 'failed') { // do something })
1 голос
/ 18 мая 2011

Если вы обнаружите ошибку на стороне сервера, установите в своем php-коде статус ответа 500 и верните сообщение об ошибке.Это вызовет ответный вызов ошибки ajaxForm.

Я не парень по PHP, поэтому я не уверен, как бы вы установили свой ответ на 500, но я использую этот метод с Asp.net, и он отлично работает.

1 голос
/ 18 мая 2011

Вам нужно будет заставить ваш PHP отправлять строку с ошибкой, которая появляется в responseText.Затем в вашем коде JavaScript вам придется интерпретировать эту строку ошибки.Это не будет ошибкой AJAX, потому что с точки зрения AJAX все работает прекрасно.AJAX не знает, что ваша программа обнаружила ошибку;он только знает, что отправил запрос и получил ответ обратно.

Другими словами: разделение полномочий и обязанностей между AJAX и вашей программой означает, что AJAX не может вмешиваться в работу вашей программы..

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