2012-01-31 75 views
2

我需要抓住從其他頁面的幾個項目,現在我jquerycalls看起來像這樣優化Ajax調用

$('.slide1 .pic').load('url div.zoomPad'); 
$('.slide1 .title').load('url .pname'); 
$('.slide1 .other').load('url .anotherdiv'); 

..等..有一種方法,使僅有1呼叫並抓住所有的元素?然後把它們放在我想要的地方?

即時通訊會在7個不同的頁面上打7個電話,所以我不認爲這會是一個好的想法,使這樣的電話..應該有一個更清潔的方式..你知道嗎?

+0

如果你可以調整服務器返回'json'你可以用輕鬆做到這一點。看到我的答案。 – gdoron 2012-01-31 18:37:19

回答

4

您可以使用.ajax而不是.load並自己在success處理程序中處理響應。

$.ajax({... 
    success: function(data){ 
     $('.slide1 .pic').html($(data).find('div.zoomPad')); 
     // etc. 
    ... 
}); 
1

嘗試是這樣的:

$('<div/>').load('url', function() { 
    $('.slide1 .pic').html($(this).find('div.zoomPad')); 
    $('.slide1 .title').html($(this).find('.pname')); 
    $('.slide1 .other').html($(this).find('.anotherdiv')); 
}); 

基本上,我們做一個Ajax調用和存儲在一個jQuery對象的響應。然後我們可以使用.find()來解析響應以獲得我們想要的。

+1

加載是異步的,這是行不通的。 – 2012-01-31 18:23:10

+0

好的。它現在使用完整的回調函數。 – 2012-01-31 18:32:13

2

是有較低級別的ajax功能:

$.ajax({ 
    url: "test.html", 
    dataType: json 
    success: function(data){ 
    $('.first').val(data.first); 
    $('.second').val(data.second); 
    //... 
    $('.n').val(data.n); // Sorry for the n part, 
         // I have a test in Linear algebra soon... 
    } 
}); 

確保服務器json格式返回數據,而你準備好與最簡單的方法去。

docs

+1

基於'data.first'等,你假設響應是JSON正確的? – 2012-01-31 18:24:49

+0

@JamesMontagne。真的添加了它。 – gdoron 2012-01-31 18:25:37