2009-03-10 3 views
3

У меня есть pageTest.html в локальной папке, на этой странице вызова service.ashx я = ... (что возвращаемое значение пары прошло увеличивается +1) с Ajax следует коду:Ajax синхронных обратных вызовов

. 
. 
getIncr: function(parameters, success){ 
     $.ajax({ 
       async: false, 
       type: methodType, 
       url: getTarget, 
       data: "n="+parameters, 
       dataType:"jsonp", 
       success: success 
      }); 
    } 
. 
. 

HTML-страница вызова этой функции на время м (с скриптом ..):

.  
    var start = function(){ 
    . 
    . 
    var val = 0; 
    .  
    . 
    for(i=0; i<m; i++) 
    { 
     Foo.getIncr(val, function(returned_n){ 
      val = returned_n; 
     }); 

    } 

}; 

во время загрузки страницы, вызовы выполняются в «асинхронный режим», но я настройка «асинхронной: ложные» в Ajax , Я прочитал об этой проблеме и нашел причину, то есть Ajax не может синхронизировать вызов с page.html на service.ashx, если есть в другом домене. Есть ли решение для выполнения вызова Synch в page.html к этому service.ashx (в другом домене)?

+3

Суровый, английский, очевидно, не первый язык Доменико. И я все понял. –

+0

Не обращай на это помощи ни на одном другом языке ... Thx Domenico! – Cody

ответ

6

Ну, проблема в том, что вы не можете сделать синхронные запросы JSONP. Способ, которым он реализован, - отметил Энди, - так называемый «взлом скрипта сценария». Невозможно, чтобы jQuery мог остановить выполнение приложения javascript, ожидая заполнения тега скрипта.

Таким образом, вы вызываете правильный метод jQuery, чтобы сделать запрос JSONP, но поскольку это JSONP, асинхронная опция не применяется, и нет никакого способа обойти ее. Вы должны обрабатывать запрос асинхронно.

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

1

Вы не можете использовать перекрестный домен XMLHttpRequest. Не имеет значения, является ли он синхронным или асинхронным.

Поскольку вы, кажется, используете JSON (и jsonp), вы сможете достичь того, чего хотите, с помощью взлома тега сценария. Я считаю, что JQuery имеет этот встроенный в него (это JQuery вы используете, кстати?):

http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29

+0

thnks, я проверю – Domenico