2013-08-12 4 views
0

Я написал запрос на отправку ajax в мой файл login.php, в котором используются такие эхо-сигналы, как «Неверный» или «Успех».Проверьте неудачу и успех в запросе ajax

Я не слишком уверен, как использовать эту функцию, так как я тоже хочу, чтобы проверить не удается, и прочее, а затем добавить текст в окне ошибки для этого ..

Любая идея?

Вот мой текущий код:

$('#submit').click(function() { 
    $.ajax({ 
     url: 'login.php', 
     type: 'post', 
     dataType: 'json', 
     data: $('form#loginForm').serialize(), 
     beforeSend:function(){ 
      launchPreloader(); 
     }, 
     complete:function(){ 
      stopPreloader(); 
     }, 
     success: function(data) { 
      window.href("chat.php"); 
     } 
    }); 
}); 
+1

Если вы не знаете, как функция Ajax работает, начните с чтения документации и глядя на примеры: api.jquery.com/jQuery .ajax/ – cfs

+0

У вас есть главный недостаток! Там действительно не нужно использовать ajax, если все, что вы намереваетесь сделать, когда вызов завершен, перенаправляется на другую страницу, основные формы HTML будут делать это по умолчанию. – adeneo

+0

@adeneo Это означает, что OP хочет разрешить отправку формы (и перезагрузить страницу).Кажется, что OP хочет внедрить логин AJAX, где пользователь перенаправляется только в том случае, если логин успешно завершен. Это немного отличается от простой HTML-формы. – Ian

ответ

2

От jQuery $.ajax() documentation ...

jqXHR объекты возвращаемый $ .ajax () с jQuery 1.5 реализует интерфейс Promise , предоставляя им все свойства, методы и Поведение обещания (см. Раздел «Отложенный объект» для получения дополнительной информации). Эти методы принимают один или несколько аргументов функции, которые вызывают, когда запрос $ .ajax() завершается. Это позволяет назначить несколько обратных вызовов по одному запросу и даже назначить обратные вызовы после завершения запроса . (. Если запрос уже завершен, обратного вызова немедленно уволен) Доступные методы Promise объекта jqXHR включают в себя:

jqXHR.done (функция (данные, textStatus, jqXHR) {}); Альтернативный вариант для опции обратного вызова успеха, метод .done() заменяет устаревший метод jqXHR.success(). Обратитесь к разделу deferred.done() за информацией о деталях реализации .

jqXHR.fail (функция (jqXHR, textStatus, errorThrown) {}); Альтернативная конструкция для опции обратного вызова ошибки, метод .fail() заменяет устаревший метод .error(). Обратитесь к разделу deferred.fail() для .

Использование кода в качестве примера .....

$('#submit').click(function() { 
    $.ajax({ 
     url: 'login.php', 
     type: 'post', 
     dataType: 'json', 
     data: $('form#loginForm').serialize(), 
     beforeSend:function(){ 
      launchPreloader(); 
     }, 
     complete:function(){ 
      stopPreloader(); 
     }, 
     success: function(data) { 
      window.href("chat.php"); 
     } 
    }).done(function() { 
     alert('Done!'); 
    }).fail(function() { 
     alert('Fail!'); 
    }); 
}); 
+2

Поскольку '.done()' является альтернативой обратному результату, нет причин для использования обоих. Рекомендуется использовать * либо * функции обратного вызова *, либо методы обещания, но не оба. (Они не будут мешать друг другу, но это может запутать будущих разработчиков.) – Blazemonger

-1

Вы могли бы использовать это:

$('#submit').click(function() { 
    launchPreloader(); 
    $.post({ 
     url: 'login.php', 
     dataType: 'json', 
     data: $('form#loginForm').serialize() 
    }).done(function(data) { 
     // If the post request was successful 
     stopPreloader(); 
     window.href("chat.php"); 
    }).fail(function(error) { 
     // If there was an error with this request 
     stopPreloader(); 
    }); 
}); 
1

Когда вы говорите, обнаружить не удается, я предполагаю, что вы имели в виду плохие запросы и т.д. ... Вы можете использовать событие StatusCode для обнаружения думает, как 404 ошибки и 500 внутренних серверов ошибок, как это:

statusCode: { 
    404: function() { 
     //console.log('Error: 404: Could not contact server.'); 
    }, 
    500: function() { 
     //console.log('Error: 500: Server error occurred.'); 
    } 
} 

поэтому полный код Ajax будет выглядеть так:

$('#submit').click(function() { 
    $.ajax({ 
     url: 'login.php', 
     type: 'post', 
     dataType: 'json', 
     data: $('form#loginForm').serialize(), 
     statusCode: { 
      404: function() { 
       //do somethign with error 404 
       alert('Error: 404: Could not contact server.'); 
      }, 
      500: function() { 
       //do something with error 500 
       alert('Error: 500: Server error occurred.'); 
      } 
     }, 
     beforeSend:function(){ 
      launchPreloader(); 
     }, 
     complete:function(){ 
      stopPreloader(); 
     }, 
     success: function(data) { 
      window.href("chat.php"); 
     } 
    }); 
}); 

страница Аякса Jquery дает описание «StatusCode» собственности http://api.jquery.com/jQuery.ajax/

Смежные вопросы