2011-04-06 54 views
0

任何我可以攔截和修改通過ajax加載的javascript的方法?jQuery ajax,在它被評估之前攔截腳本

我需要能夠將腳本查詢字符串解析爲變量,並在評估之前預先添加它們。

我爲jQuery 1.4所做的一些代碼,但這不再適用於1.5,並不是特別好。

var oHttpData = jQuery.httpData, oGlobalEval = jQuery.globalEval, evalUrl = null; 
jQuery.extend({ 
httpData: function(xhr, type, s) { 
    if (type === "script") 
     evalUrl = s.url; 
    console.log(type); 
    console.log(s); 
    var data = oHttpData.apply(this, [xhr, type, s]); 
    evalUrl = null 
    return data; 
}, 
globalEval: function(data) { 
    if(evalUrl != null && evalUrl.indexOf('?') !== -1) { 
     var matches = evalUrl.match(/.*?\?|([\w]*)([\w\+%\.]*)[^&$]/ig), str = '(function() { var '; 
     for (var i = 1; i < matches.length; ++i) 
      str += matches[i] + '\'' + 
       (matches[i + 1] && !(/=/g).test(matches[i + 1]) ? decodeURIComponent(matches[(i++) + 1]) : '') + '\'' + 
       (i != matches.length - 1 ? ',' : ';'); 
     data = str + data + '})();'; 
    } 
    oGlobalEval.apply(this, [data]); 
} 
}); 

這將趕上腳本只是EVAL之前並與查詢字符串作爲變量封閉包裹。

+0

在Ajax加載完成後,是否更容易將init函數作爲回調調用? – 2011-04-06 16:50:44

回答

0

經過多一點挖掘jQuery後,我發現需要的方法。

$.ajaxSetup({ 
    dataFilter: function(response, type) { 
     return response; 
    } 
}); 

允許修改的響應,同時仍然在Ajax調用的範圍。