JQuery: как сделать свой $.post?

У меня во всем проекте отправка $.post выглядит примерно так:



$.post('/some/page',{'ajax':'1', 'some':'some'}, function(rJson) <br>
{<br>
    var r = $.parseJSON(rJson);<br>
    if(r.status === 'error') {<br>
        alert(r.msg);<br>
        return;<br>
    }<br>
    ...<br>
});<br>


Отличаются только параметры ну и собственно сам код, если статус ответа не ошибка.



Как можно сделать свой $.postJson и использовать только его? А то чувствую что не дело писать одно и то же… Надо, чтоб было так:



$.postJson('/some/page',{'some':'some'}, function(r) <br>
{<br>
    // Тут уже всё будет проверено на r.error<br>
    ...<br>
});<br>
  • Вопрос задан
  • 3097 просмотров
Решения вопроса 1
sdevalex
@sdevalex
$.postJson = function(url, data, callback){
   $.post('/some/page',{'ajax':'1', 'some':'some'}, function(rJson) 
   {
       var r = $.parseJSON(rJson);
       if(r.status === 'error') {
          alert(r.msg);
           return;
       }
    
       callback(r);
   });
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
akral
@akral
В оригинальном коде три мелочи, достойные улучшения.

1. Парсить JSON самому не надо:
$.ajax({
  dataType: 'json'
});


2. Передавать {'ajax':'1'} не надо, AJAX посылает заголовок X-Requested-With: XMLHttpRequest, по которому нужно определять, что это AJAX.

3. Кавычками обрамлять ключи в словаре не нужно:
{
  some: 'some'
}


Ну и да, ошибки должны возвращатся с кодом HTTP, а не своим полем.
Ответ написан
Mithgol
@Mithgol
Действуйте согласно руководству Шевчука.
Ответ написан
Комментировать
@lair
У вас, на самом деле, ошибка в проекте. Если на сервере что-то не так, он не должен возвращать успешный JSON со свойством status, он должен возвращать HTTP error status. После чего вы радостно вешаете глобальный обработчик на $.ajaxError и наслаждаетесь результатом.
Ответ написан
ServDev
@ServDev
заверните все в функцию и передавайте туда 2 параметра url и data
data = как json строка — потому что по сути {'ajax':'1', 'some':'some'} и есть json
и тогда получиться

function sendJson(url, data){
	$.post(url,data, function(result) {
	    
	    if(r.status === 'error') {
	        alert(r.msg);
	        return;
	    }
	  //TODO check result
	}, 'json');
}
Ответ написан
Комментировать
@lair
Еще можно использовать $.ajaxPrefilter, и спрятать обработку в него. Помогает, если действительно везде одинаково.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы