2009-08-08 2 views
0

Я делаю AJAX с JQuery, но каждый раз, когда событие onSuccess должно выполняться после отключения другого запроса AJAX.JQuery ajax onSuccess event

Вот код:

d.ajax({ 
     url: f.options.url.offline, 
     dataType: "jsonp", 
     jsonp: "callback", 
     cache: false, 
     data: { 
      status: "offline", 
      ticket: f.connection.options.ticket 
     }, 
     success: function(g) { 
      f._offlineSuccess() 
     }, 
     error: function() { 
      f._offlineError() 
     } 
    }) 

Все мои запросы AJAX являются JSONP, и когда вышеуказанный код запускается, есть еще одна связь AJAX (длинный запрос опроса, длится около 10 senconds) уже установлены в среднее время. Таким образом, функция «f._offlineSuccess» всегда выполняется после отсоединения другого соединения AJAX.

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

Любая помощь приветствуется ~

================================

обновлен :

Я только что узнал, что если у меня одновременно есть соединение JSONP, функция onSuccess/onFailure будет заблокирована. Я не знаю, сталкивался ли кто-то с той же проблемой раньше?

+0

Изменен мой андерсер. – redsquare

ответ

1

Запросы Ajax являются асинхронными. поэтому новый запрос не подходит для предыдущего. Если вы хотите, чтобы это поведение использовало параметр async равным false, или используйте функцию complete() для вызова другого запроса. Это срабатывает только после завершения первого запроса.

UPDATE Для JsonP используйте jQuery.getJSON() и выполните второй запрос при обратном вызове, если вызов был успешным.

function (data, textStatus) { 
    // data will be a jsonObj 
    // textStatus will be one of the following values: 
    // "timeout","error","notmodified","success","parsererror" 
    this; // the options for this ajax request 
} 
+0

Спасибо за ваш ответ. Теперь они выполняются асинхронно, только блокируется событие onSuccess одного соединения. И он ведет себя так, как будто они синхронны (и я не хочу, чтобы это было так). Я уверен, что соединение ajax выполняется и сразу получает контент (я вижу это через httpfox), но единственная проблема - это событие onSuccess, событие отложено. –

+0

это jsonp, а не запрос xhr. он использует скриптовые теги, а не xmlhttp, поэтому вы не можете установить синхронизацию или asych – redsquare

+0

@ Микки Shine проверить обновление. @redsquare вы правы, я никогда не использовал его до сих пор, документация хороша, хотя –

0

Если вы используете вкладку firebug-net, вы сможете увидеть полный URL-адрес двух запросов jsonp. Вы должны иметь возможность видеть имена функций обратного вызова в конце URL-адреса. Являются ли они разными или одинаковыми? Я могу только предположить, что они одинаковы.

+0

Что вы имеете в виду «переопределение части обратного вызова»? Более конкретно, пожалуйста? –

+0

http://some.com:8000/cometd?callback=jsonp1249728075313&_=1249728216558 http://some.com/a.php?callback=jsonp1249728075314&_=1249728219580 вот URLS, я думаю, что они не являются такой же (jsonp12497 ...). Можете ли вы мне помочь? –

+0

Что вы подразумеваете под длинным запросом на опрос. Первый вызов jsonp занимает много времени, чтобы вернуться? – redsquare