2012-02-05 43 views
0

我使用$.post送打造出用戶輸入的JSON結構:jQuery的POST請求:如何指示瀏覽器活動

$.post(
    url1, 
    {'input': JSON.stringify(input)}, 
    function(data) { 
     if (data['status']) window.location.href = url2; 
     else window.location.href = url1; 
    } 
); 

重定向始終職後發生。我的問題是瀏覽器在帖子期間似乎處於非活動狀態,並且在重定向開始之前不顯示任何活動(即加載進度),導致在看似沒有任何事情發生時大約1秒。通過活動,我只是指瀏覽器告訴用戶它正在加載一個頁面的標準方式(例如,顯示在我的Firefox瀏覽器標籤上的進度圈)。發佈開始後有沒有辦法調用這種標準行爲?

編輯:有人問爲什麼我不簡單地使用標準表單提交。那麼這是因爲我需要發送的數據有點複雜,我不知道這樣的事情是否可以通過標準(非Ajax)方式來完成。這就是我如何構建數據:

var input = []; 
$('.shopCat > p > input').each(function() { 
     input.push({ 
     'id': $(this).closest('div').attr('id'), 
     'name': $(this).val(), 
     'parent': $(this).closest('div').attr('data-parent'); 
    }); 
}); 

是否有可能與標準後形式來構建和後這些數據? (所以我實際上現在問兩個問題。)

回答

1

那麼,你不能強迫瀏覽器看起來很忙。但是你可以將光標移動到繁忙

$(document).css('cursor','wait'); 
$.post(
url1, 
{'input': JSON.stringify(input)}, 
function(data) { 
    if (data['status']) window.location.href = url2; 
    else window.location.href = url1; 

} 
); 

雖然它可能會更好不使用AJAX,只需使用普通的表單提交,既然你選擇了之後反正重定向。

2

沒有在jQuery或JavaScript中這樣做的打包手段。你可以想象有很多情況下人們選擇顯示一個等待圖標。只需在發佈之前顯示您的等待內容,然後在回調中隱藏它。

$('#waiting').show(); //show waiting icon or whatever 
$.post(
    url1, 
    {'input': JSON.stringify(input)}, 
    function(data) { 
     $('#waiting').hide(); //hide it on callback 
     if (data['status']) window.location.href = url2; 
     else window.location.href = url1; 
    } 
); 

如果您有特定的想法,請告訴我們。就像你想要一個模式窗口,或一個特定的div被掩蓋。一個進度條,這些圓圈dealies之一,請稍候文本,等等,等等

+0

謝謝。我可能會使用這種方法,因爲從JavaScript訪問「標準瀏覽器資源」可能是不可能的。請如果你能,看到我編輯的帖子...我很好奇,如果我的做法從一開始就沒有錯...... – clime 2012-02-05 05:29:03

1

您可以使用jquery blockui plugin表明,一些異步操作正在進行中......就叫blockUI後期製作之前,和unblockUI在回調。它並不需要阻止用戶界面......請看看這裏的examples,並查看「Growl」選項或適合您的用例的內容。

1

如果總是發生重定向,爲什麼您使用AJAX請求而不是將表單發佈到服務器並在服務器端重定向?由於您保存了請求,因此您還可以獲得更好的性能。

+0

好問題:)。請看我編輯的帖子。 – clime 2012-02-05 05:23:00