mikermcneil
mikermcneil

Reputation: 11271

Sencha Touch JSONP error

EDIT:

I came across a confirmation of what I suspected: Using the twitter search API with JSONP causes the problem in isolation, so it seems that something is going wrong with Twitter.

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

About 3/5 times, as of 3:44PM CT on 14 June, Twitter returns garbage. The rest of the time, it returns a valid javascript function call.


I'm using Sencha Touch to make a JSONP request to the Twitter search API, and about 1/100 times, I'm getting a javascript error that kills further polling:

Uncaught SyntaxError: Unexpected token ILLEGAL

So far I've tried the following with no leads:

  1. Wrapping the call to Ext.util.JSONP.request({}) in a try/catch block. Doesn't catch the error (presumably because it's being called from a script tag in an iframe)
  2. Dumping the query parameter passed into JSONP.request to make sure that it's valid. It is.
  3. Looking for a pattern-- it seems to happen at unexpected times. Could be the very first request, or it could be 100 requests down the line.

My best guess is that Twitter is sending back garbage some of the time. That's ok, I just need a way to handle that error. Unfortunately, as far as I can tell, Sencha Touch doesn't have any built-in error handling for its JSONP requests.

Have you seen anything like this before? Do you have any ideas?

Thanks!

Here's what the ornery JSONP script response looks like:

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_�����);

Upvotes: 4

Views: 1703

Answers (2)

arcain
arcain

Reputation: 15280

I recently answered a similar question in which the OP was encountering fail whales while using the search API.

I found this question which had some interesting answers regarding error handling in JSONP. To summarize, one approach is to wrap all errors returned by the server in JSON, and another provides a link to jQuery-JSONP, a nice looking reinterpretation of jQuery's JSONP implementation.

Upvotes: 1

rdougan
rdougan

Reputation: 7225

Interesting. You would need to override the callback method in the Ext.util.JSONP class, and wrap the line which calls the callback, in a try/catch block. Then in the catch block try and call an errorCallback (which you need to define in your actual JSONP request).

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();
};

Upvotes: 1

Related Questions