2012-09-11 46 views
0

我有以下幾點:我是否需要使用jQuery .load()選擇器?

function callback_function(a,b,c) { 
    var aa = a; 
    var bb = b; 
    $('#content').html("xxx"); 
} 

$('#content').load(href, "", function (a, b, c) { callback_function(a, b, c) }); 

我想要做的就是把值「XXX」到div#content的HTML。有人可以解釋如何做到這一點?我認爲它將與callback_function中的代碼一起工作,但是如果那樣做的話,實際的​​也會將一些數據放入#content

如果我正在做callback_function()中的所有事情,我是否還需要​​左側的內容。我希望這是有道理的。請注意,它不是生產準備。我意識到我需要重命名參數,做錯誤檢查等。

請注意我想使用.load不是.ajax。因爲我正在使用下面的包裝。對不起提前,這是一個很大的代碼:

$.fn.loadWithEffect = function() 
{ 
    // Add effect layer 
    this.addEffectLayer({ 
     message: $.fn.loadWithEffect.defaults.message 
    }); 

    // Rewrite callback function 
    var target = this; 
    var callback = false; 
    var args = $.makeArray(arguments); 
    var index = args.length; 
    if (args[2] && typeof args[2] == 'function') 
    { 
     callback = args[2]; 
     index = 2; 
    } 
    else if (args[1] && typeof args[1] == 'function') 
    { 
     callback = args[1]; 
     index = 1; 
    } 

    // Custom callback 
    args[index] = function(responseText, textStatus, XMLHttpRequest) 
    { 
     // Get the effect layer 
     var refElement = getNodeRefElement(this); 
     var layer = $(refElement).next('.loading-mask'); 
     var span = layer.children('span'); 

     // If success 
     if (textStatus == 'success' || textStatus == 'notmodified') 
     { 
      // Initial callback 
      if (callback) 
      { 
       callback.apply(this, arguments); 
      } 

      // Remove effect layer 
      layer.stop(true); 
      span.stop(true); 
      var currentMarginTop = parseInt(span.css('margin-top')); 
      var marginTop = parseInt(span.css('margin-top', '').css('margin-top')); 
      span.css({'marginTop':currentMarginTop+'px'}).animate({'opacity':0, 'marginTop':(marginTop-40)+'px'}, { 
       'complete': function() 
       { 
        layer.fadeAndRemove(); 
       } 
      }); 
     } 
     else 
     { 
      span.addClass('error').html($.fn.loadWithEffect.defaults.errorMessage+'<br><a href="#">'+$.fn.loadWithEffect.defaults.retry+'</a>/<a href="#">'+$.fn.loadWithEffect.defaults.cancel+'</a>'); 
      span.children('a:first').click(function(event) 
      { 
       event.preventDefault(); 

       // Relaunch request 
       $.fn.load.apply(target, args); 

       // Reset 
       span.removeClass('error').html($.fn.loadWithEffect.defaults.message).css('margin-left', ''); 
      }); 
      span.children('a:last').click(function(event) 
      { 
       event.preventDefault(); 

       // Remove effect layer 
       layer.stop(true); 
       span.stop(true); 
       var currentMarginTop = parseInt(span.css('margin-top')); 
       var marginTop = parseInt(span.css('margin-top', '').css('margin-top')); 
       span.css({'marginTop':currentMarginTop+'px'}).animate({'opacity':0, 'marginTop':(marginTop-40)+'px'}, { 
        'complete': function() 
        { 
         layer.fadeAndRemove(); 
        } 
       }); 
      }); 

      // Centering 
      span.css('margin-left', -Math.round(span.outerWidth()/2)); 
     } 
    }; 

    // Redirect to jQuery load 
    $.fn.load.apply(target, args); 

    return this; 
}; 

回答

1

,而不是load()使用ajax()

$.ajax({ 
    url : href, 
    success:function(data){ 
     callback_function(a, b, c) }); 
    } 
}) 
+0

請我想使用負載的其他原因。 – Angela

+1

@Angela如果你沒有加載到dom元素中,使用'load'沒有意義.... – Neal

+0

謝謝Neal,但我實際上使用了一個使用load的包裝器。我無法更改包裝。我只需要知道如何設置要加載的參數,因爲它們與包裝參數相同。 – Angela

1

只要改變你的代碼,這樣你就不會做選擇兩次:

function callback_function(a,b,c) { 
    var aa = a; 
    var bb = b; 
    $(this).html("xxx"); //<-- key! 
} 

$('#content').load(href, callback_function); 

或使用.ajax代替.load

function callback_function(a,b,c) { 
    var aa = a; 
    var bb = b; 
    $("#content").html("xxx"); 
} 
$.ajax({ 
    url : href, 
    success: callback_function 
}); 
+0

對不起,我原來的問題的某些部分被錯過了,因爲有人在編輯它時遇到了問題,但我試圖解釋更多。我想說的是,我正在使用一個包裝器,它調用以下內容://重定向到jQuery加載:$ .fn.load.apply(target,args);你認爲我可以改變封裝來使用.ajax嗎? – Angela

+0

@Angela這是什麼_mysterious_「包裝」,你用它來做什麼? – Neal

+0

這個包裝有點太長,不能包含在這裏。它用於在用戶屏幕上顯示「加載」消息。我正在使用的模板的一部分。我可能可能會複製該包裝代碼並替換爲ajax而不是.load – Angela