Закрытие Google: централизованный AJAX-декодер? - PullRequest
0 голосов
/ 02 февраля 2012

Прежде всего, я должен сказать, что я очень плохо знаком с Google Closure, но я учусь:)

Итак, я делаю веб-приложение, которое будет довольно большим, и я подумал, что было бы хорошо управлять всеми AJAX-запросами в одном XhrManager. Нет проблем там.

Но возможно ли иметь какой-то обратный вызов по умолчанию , который сначала проверял бы ошибки, отображал их при необходимости, а затем, когда он проходил, запускал "настоящий" обратный вызов? Я говорю о такой функции, как декодеры в ampify.js . Вот их объяснение:

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

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

Решение, которое я сейчас имею в голове, - это создание объекта, в котором хранятся все «реальные обратные вызовы», из которых «обратный вызов с проверкой ошибок» будет выполнять правильный после завершения проверки, но я чувствую, что это немного взломать, и я думаю, что должен быть лучший способ для этого.

1 Ответ

1 голос
/ 03 февраля 2012

Поскольку вам всегда приходится декодировать / проверять данные AJAX (вы никогда доверяете данным, возвращенным с сервера, не так ли?), У вас всегда будут разные декодеры / верификаторы для различных типов полезных нагрузок AJAX. Таким образом, вы, вероятно, должны передавать процедуру декодера / верификатора как сам обратный вызов AJAX - для проверок, общих для всех типов данных, вызовите общую функцию внутри обратного вызова.

Дополнительным преимуществом этого будет возможность «преобразовывать» не искаженные объекты JSON в «искаженные» объекты JSON, чтобы вам не приходилось использовать доступ к кавычкам в вашем коде.

Например, предположим, что ваша полезная нагрузка AJAX состоит из следующего объекта JSON:

{ "hello":"world" }

Если вы хотите сослаться на свойство hello в своем коде и по-прежнему проходить в расширенном режиме компилятора, вам нужно будет выполнить obj["hello"]. Однако, если вы передадите свой декодер в качестве обратного вызова, и в первой строке вы сделаете:

var decoded = { hello:response["hello"] };

, затем выполните проверку ошибок и т. Д., Прежде чем возвращать decoded в качестве ответа AJAX. В своем коде вы можете просто сделать obj.hello, и все будет хорошо оптимизировано и исправлено в расширенном режиме.

...