Sencha Touch JSONP ошибка - PullRequest
       23

Sencha Touch JSONP ошибка

4 голосов
/ 14 июня 2011

EDIT:

Я наткнулся на подтверждение того, что подозревал: использование API поиска в Твиттере с JSONP вызывает проблему изолированно, поэтому кажется, что с Twitter что-то не так.

См: http://search.twitter.com/search.json?q=%23jimromeisburning&callback=dog

Примерно 3/5 раз, по состоянию на 15:44 CT 14 июня, Twitter возвращает мусор. В остальное время он возвращает допустимый вызов функции JavaScript.


Я использую Sencha Touch для отправки JSONP-запроса в API поиска в Твиттере, и примерно 1/100 раз получаю ошибку javascript, которая убивает дальнейший опрос:

Uncaught SyntaxError: Unexpected token ILLEGAL

До сих пор я пробовал следующее без лидов:

  1. Заключение вызова в Ext.util.JSONP.request ({}) в блок try / catch. Не отлавливает ошибку (предположительно потому, что она вызывается из тега script в iframe)
  2. Вывод параметра query, переданного в JSONP.request, чтобы убедиться, что он действителен. Это.
  3. В поисках паттерна - кажется, это происходит в неожиданные времена. Это может быть самый первый запрос, или это может быть 100 запросов на линии.

Мое лучшее предположение - то, что Твиттер иногда отправляет обратно мусор. Это нормально, мне просто нужен способ справиться с этой ошибкой. К сожалению, насколько я могу судить, Sencha Touch не имеет встроенной обработки ошибок для своих запросов JSONP.

Вы видели что-нибудь подобное раньше? У вас есть идеи?

Спасибо!

Вот как выглядит отклик JSONP скрипта ornery:

Ext.util.JSONP.callback(�Řo�6ǿ
�`)֥��k�em��+�`�
-�-��RT��w�ɖ���$v�-A^ґ���Ow�|�4Tua*+����ת����Ⱥ��VbšҐ�֡5Ҫ/
芒�[�o�ƌ��NnjE9褪���*��N3�1j;QRǏ®T��E�r4��S
�@��w|��!a.���ġ�%�����@��*����>Z8^_h��녾z>u]�E��ϸ�V��u�k&#@k
)Hc}=���;o%�.
�׍���L��5�T�B*�?������{���꒼z�M���.}/dm�=���곒5i�KA��y����Q�n���n����
Һ�x��̼R�N���q�k��<�\+s�*���&[��DCњH�WE�Ƴ���uhj�ڼ����ȋ��,t"�>�'����o�VnK��ⳍ�\�p,'9�
��:~{��"���8n�    
�x�ͫK���C�mx(�<�
����3>������B]A_�L�+=�%fY�*1��/���wO�vc�Z8d=)̦1����߳35����-F����.f���D|�.z6����Xs��s\愶  ���M*Z�D�� �7ڈ�)ϗ    cA�^9N�n�aN@�w�/^
P��¸-�E�$R�����<�K�n�3A3��?�L+�mI��vՃ�0Ǎ}o���Q��4�����=e��n�q8��ģ�����.�C)s=�:+>�O�h9�C2Q5Y���PA����*�3y1�t�`���g��WǠ�YB�O�/�{+.�[����,ߴ��/�yQ�<t(���|ߥ�G����ݾ�b��ijBS�9��.E�>�D%�I���jz�켻0�q��0`Q��.��.�>88�춖��(i4fȻgW@�aI*�������#���z�j�\5g��\�n���e���c��7�o��w�z�,�|/��+�N�����}�z+v����nd�
NY�R��o��    }��hĚ�;��g�D2��9�����:-e�����^@Ua���j2C��#�U���k�9���I�'�ܐ���/H3�q(��d�<�$����q~͛5��}��V�ft�'U'{���0�����Ø��sC?|B��0I���B�E] %�c��S���6LC�x�Y�EQT�*�Akr��÷OyOn��N�7iSkW` �F�q�!�����+,[���I��1
�i�3C*����_��h�K �� ^�{�V|YìM�7ŬW�t��'��ek��y�lr�l�WM)Đ�>�O���F,`�w��r��6�a�X����B�n�2t�O\�R7��O�n���!`�@
M� i���MU]5_�k�TMR�� 'Z��Y��C�Sn�q.�V��";d�`x��k Β��Mr��/�����٬A��Fq�B|L���>+,B0��R��K�����˵u�_~縫}��Zw����E���7�K����:.�i�n%��4l�/F���������5_�����);

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Я недавно ответил на аналогичный вопрос , в котором ОП встречал сбойных китов при использовании API поиска.

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

1 голос
/ 15 июня 2011

Интересно.Вам необходимо переопределить метод callback в классе Ext.util.JSONP и обернуть строку, которая вызывает обратный вызов, в блок try / catch.Затем в блоке catch попробуйте вызвать errorCallback (который вы должны определить в своем фактическом запросе JSONP).

Ext.util.JSONP.callback = function(json) {
    try {
        this.current.callback.call(this.current.scope, json);
    } catch(e) {
        this.current.errorCallback.call(this.current.scope);
    }

    document.getElementsByTagName('head')[0].removeChild(this.current.script);
    this.next();
};
...