обработка ошибок Ajax jQuery

Я искал вопросы на здесь, но у меня нет хорошего понимания того, как использовать обработку ошибок в Ajax jQuery (im новичок, таким образом, это просто действительно не имеет смысла.)

Кто-либо может описать это новичку? Я в настоящее время размещаю информацию к Сценарию PHP через Ajax, но хочу позволить jQuery распознавать, являются ли возвращенные данные из сценария ошибкой или успехом.

Спасибо! Dave

6
задан Dave Kiss 8 January 2010 в 22:20
поделиться

4 ответа

В зависимости от частоты операций, размера файлов и количества просматриваемых файлов, необходимо учитывать другие проблемы с производительностью. Одно следует помнить, что каждый из ваших массивов байтов будет выпущен на милость сборщика мусора. Если вы не кэшируете какие-либо из этих данных, вы можете в конечном итоге создать много мусора и потерять большую часть производительности % времени в GC . Если куски больше 85K, вы будете выделять Большой кучи объектов (LOH), которая потребует коллекции всех поколений, чтобы освободить (это очень дорого, и на сервере будет остановить все выполнение, пока это происходит). Кроме того, при наличии тонны объектов на LOH можно получить фрагментацию LOH (LOH никогда не уплотняется), что приводит к низкой производительности и исключениям из памяти. Вы можете переработать процесс, как только достигнете определенной точки, но я не знаю, является ли это лучшей практикой.

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

-121--522944-

решил свой вопрос!

NSString *language = [[NSLocale preferredLanguages] firstObject];
if (!language) {
   language = @"en";
}
NSLog(@"The device's specified language is %@", language);

Swift version:

var language : String! = "en"
if let lng = NSLocale.preferredLanguages().first {
  language = lng
}
print("The device's specified language is \(language)")
-121--3042678-

Возврат ошибки из вызова ajax возвращает результаты из-за неуспешной загрузки страницы. Это может быть то, что ваша php страница возвращает действительную страницу, но с результатами, которые не то, что вы хотите. Это обрабатывается без возврата успеха. Надеюсь, следующий фрагмент кода поможет проиллюстрировать...

$.ajax({
    type: "POST",
    url: "login.php",
    data: "action=login&user=" + user + "&pass=" + pass,
    success: function(xhr){
        if ((xhr == "Invalid Login") 
                || (xhr == "Invalid charaters in username.") 
                || (xhr == "Missing username or password.")
                || (xhr == "Unknown Error")) {
            $("#loginMessageContent").html(xhr);
        }
        else {
            simplemodalClose (dialog);
        }
   }, 
   error: function(xhr) {
       alert ("Oopsie: " + xhr.statusText);
   }
});
20
ответ дан 8 December 2019 в 04:08
поделиться
[

] Это только один подход. Я создаю приложение, которое возвращает все свои данные в JSON. Если есть ошибка, то JSON-сообщение изменяется, чтобы отразить это. Каждый возвращаемый объект имеет "статус" в либо "успех", либо "ошибка". Если это ошибка, то в JSON есть часть "error_message", которая описывает ошибку.[

] [

]Я надеюсь, это поможет.[

]
2
ответ дан 8 December 2019 в 04:08
поделиться

JQuery AJAX обработки ошибок реализована для обработки, если HTTP запрос имеет ошибку, если ваш сценарий возвращает "ошибка" или "успех". Если сервер выдает ошибку (например, 404 Not Found или 500 Server Error), то это вызовет функции обработки ошибок jQuery. Это можно сделать несколькими способами, но один хороший способ - показать дайвинг, сообщив пользователю, что произошла ошибка.

HTML

<div id="error" style="display: none">There was an error processing your last request</div>

jQuery

$(function(){
   $("#error").ajaxError(function(){
      var $error = $(this);
      $error.slideDown(500, function(){
          window.setTimeout(function(){
              $error.slideUp(500);
          }, 2000);
      }); 
   });
});

Если произойдет ошибка, ни один из ваших "успешных" методов не запустится, и что div соскользнет вниз, подождет 2 секунды, а затем соскользнет обратно.

Тестирование вашего скрипта на наличие ошибок

Как я уже упоминал, то, что вы описали, звучит так, как будто ваш серверный скрипт посылает "ошибку" или "успех" или что-то подобное обратно клиенту.

Если вы используете, например, $.post, ваш код обработки ошибок может выглядеть следующим образом:

$.post('/your/url', { save_me: true }, function( data ){
   if(data == "error"){ 
      // handle error
   } else {
      // handle success
   }
}
2
ответ дан 8 December 2019 в 04:08
поделиться

Если вы просто хотите преобразовать значения в красивые последовательности, сделайте следующее:

twodecimals = ["%.2f" % v for v in vars]

В качестве альтернативы, вы можете также распечатать единицы, как у вас есть в вашем вопросе:

vars = [0, 1, 2, 3] # just some example values
units = ['kg', 'lb', 'gal', 'l']
delimiter = ', ' # or however you want the values separated

print delimiter.join(["%.2f %s" % (v,u) for v,u in zip(vars, units)])
Out[189]: '0.00 kg, 1.00 lb, 2.00 gal, 3.00 l'

Второй способ позволяет легко изменить разделитель (табуляция, места, новые линии, что угодно), чтобы удовлетворить ваши потребности легко; разделитель может также быть аргументом функции вместо жесткого кодирования.

Изменить: Чтобы использовать синтаксис 'name = value', просто измените операцию по элементам в понимании списка:

print delimiter.join(["%s = %.2f" % (u,v) for v,u in zip(vars, units)])
Out[190]: 'kg = 0.00, lb = 1.00, gal = 2.00, l = 3.00'
-121--967996-

Я реализовал поддержку обратного вызова/делегата в Java с помощью отражения. Подробная информация и рабочий источник доступны на моем сайте .

Как это работает

У нас есть основной класс с именем Callback с вложенным классом WireParms. API, которому требуется обратный вызов, примет объект обратного вызова в качестве параметра и при необходимости создаст Callback.WireParms в качестве переменной метода. Поскольку большое количество приложений этого объекта будет рекурсивным, это работает очень чисто.

Поскольку производительность по-прежнему имеет для меня высокий приоритет, мне не хотелось бы, чтобы мне требовалось создавать массив объектов throwway для хранения параметров для каждого вызова - в конце концов, в большой структуре данных могут быть тысячи элементов, и в сценарии обработки сообщений мы можем в конечном итоге обрабатывать тысячи структур данных в секунду.

Чтобы быть защищенным от потоков, массив параметров должен существовать однозначно для каждого вызова метода API, и для эффективности один и тот же должен использоваться для каждого вызова обратного вызова; Мне нужен был второй объект, который было бы дешево создать, чтобы связать обратный вызов с массивом параметров для вызова. Но в некоторых сценариях инициатор уже имеет массив параметров по другим причинам. По этим двум причинам массив параметров не принадлежит объекту Callback. Кроме того, выбор вызова (передача параметров в виде массива или отдельных объектов) находится в руках API с помощью обратного вызова, позволяющего использовать любой вызов, который лучше всего подходит для его внутренней работы.

Вложенный класс WireParms является необязательным и служит двум целям, содержит массив объектов параметров, необходимый для вызова обратного вызова, и предоставляет 10 перегруженных методов invoke () (с параметрами от 1 до 10), которые загружают массив параметров, а затем вызывают целевой объект обратного вызова.

-121--1823314-

Хотя это не ваша проблема, я опубликую здесь, поскольку это связано.

В недавней версии JQuery v1.4 ответы JSON теперь проверены. Он сломал приложение, потому что я вернулся:

 {success:true}

и теперь он должен быть

 {"success":true} // HAS to be double quotes, single won't do it

Если неверно, он вызывает обработчик ошибок. Легко исправить, но нужно немного разобраться.

2
ответ дан 8 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: