2013-11-20 3 views
0

Я хочу отключить/предотвратить загрузку страницы до тех пор, пока вызов JS не будет завершен. Я понимаю, что единственный способ сделать это с $.ajax так:

$.ajax({ 
url: "/acme/confirm_authentication.html", 
async: false, 
cache: false, 
success: function(data) { 
    // loaded 
} 

В настоящее время я загружаю частичную страницу с .load() функции следующим образом:

var linkUrl = $('.js-dialog--on-load').attr('dialog-href') + ' #lga'; 
showDialogWindow(linkUrl); 

function showDialogWindow(linkUrl) { 
    $('.container').append($("<div>").load(linkUrl, function(){ 

    }).addClass('js-dialog')); 
} 

Смотрите демо: http://jsfiddle.net/SQDDD/1/

Как я могу перевести это в вызов $.ajax?

Помните, что я использую .load(), так что я могу загрузить только часть сайта (#lga).

ответ

1

asyc: false является (большую часть времени) зло; -)

Вы можете попробовать что-то вроде:

function showDialogWindow(linkUrl) { 
    $.ajax({ 
    url: linkUrl, 
    async: true, 
    cache: false, 
    success: function(data) { 
     $('.container').append($("<div>"+data+"</div>").addClass('js-dialog')); 
    } 
    }); 
} 

Имейте в виду, что вы потеряете возможность выбора доступных в нагрузке

+0

@jbi Спасибо. Почему «асинхронное: ложное» зло? – Alex

+0

@Alex, потому что он заморозит ваш браузер для возможного времени ожидания и обеспечит очень плохой пользовательский интерфейс. См. Http://stackoverflow.com/q/7588994/1236044 – jbl

+0

@jbi Я вижу. Тогда нет смысла использовать '. $ .ajax' над' .load() 'правильно? – Alex

0

Посмотрите at this example:

У меня есть этот HTML:

... 
<body> 
    <a href=""> aaa</a> 
    <p>bbb</p> 

</body> 
... 

теперь получают в p элемент из AJAX:

$.ajax(
    { 
     url: 'http://jsbin.com/oFUMOtO/3/quiet', 
     type: "GET", 
     dataType: 'html', 
     success: function (data) 
     { 
      alert($("<div>").html(data).find("p").text()); //alerts bbb 

     } 
    });