2010-05-06 8 views
0

J'ai un JSON qui retourne à partir du serveur qui onglets pour construire,
donc je les init mes JS comme ceci:jQuery-Ui Ajax Tabs bug?

$('#tabs').tabs('ajaxOptions', { 
    timeout: 20000, 
    error: function(xhr, status, index, anchor){ 
     console.log(status, index, anchor); 
    } 
}) 
.tabs('add', item.CategoryLink, item.CategoryName); 

chose est, lorsque je clique sur un onglet, et avant qu'il ne soit fait le chargement je clique sur un autre onglet,
la précédente demande est annulée et n'a jamais été appelée à nouveau quand je clique à nouveau sur cette première!
c'est très mauvais, car il n'a évidemment pas aller chercher la demande, alors qu'est-ce qui donne?
J'ai essayé de passer par cela en définissant:

.tabs({ cache: false })

mais c'est une mauvaise chose à faire, parce que je ne veux pas avoir une demande à chaque fois de nouveau ...
il devrait être cachced si la réponse a été envoyée.

utilisant jquery-ui 1.8.1

+0

Je vois qu'il ya un billet ouvert sur ce bug: http://dev.jqueryui.com/ ticket/5465 – vsync

Répondre

1

Solution du bug tracker:
utiliser cet événement dans la charge onglets:

load: function(event, ui){ 
    $(ui.tab).data("cache.tabs",($(ui.panel).html() == "") ? false : true); 
} 
0

Vous utilisez probablement le même objet XHR pour l'appel AJAX, annulant ainsi toute demande précédente. C'est, autant que je peux voir, inévitable que vous ne pouvez pas créer manuellement une demande XHR new lors de l'utilisation de la fonction tabs.

De plus, vous avez 20 (timeout: 20000,) second délai d'expiration en cliquant sur votre onglet. À quoi cela sert-il?

Hth

+0

parce que j'ai des onglets qui prennent beaucoup de temps à charger, donc je leur donne 20sec chance de répondre, puis je demande une erreur. la seule solution que je peux penser est de réécrire les onglets moi-même – vsync