2012-01-25 27 views
0

我正在爲我的教授建立一個網站,並且試圖不重複我的代碼,因爲我將失敗。我該如何改進這個ajax調用,以便它可以在全球範圍內使用?

我有以下.getJson調用,我想在多個位置使用,以便我不必重複代碼多餘。

function GetJSON() 
{ 
    var a = $.getJSON("/controller_name/action", null, function (z) {}) 
    .success(function (z) { 
       //Success Action 
    }) 
    .error(function (z) { 
       //Error Action 
    }) 
    .complete(function (z) { 
       //Complete Action 
    }); 
} 

我可以在變量傳遞成功,錯誤和完整的事件,但我認爲這種方式有變得非常凌亂的潛力。有沒有辦法設置這個,這樣我就不必在我的網站上有相同的GetJSON函數了。

+0

我沒有看到如何在另一個函數中包裝'$ .getJSON'函數會減少你的代碼......只要在需要它的每個實例中調用'$ .getJSON'。你的'.getJSON'包裝函數只能將參數轉發給實際的'。.getJSON'函數,從而在這個過程中產生開銷。如果你有一些需要爲每個AJAX調用運行的函數,那麼使用全局AJAX事件:http://api.jquery.com/category/ajax/global-ajax-event-handlers/ – Jasper

+0

好吧,它會如果提供給AJAX調用的其他內容或從此示例代碼中省略的數據,則將其減少。如果有多個對這個函數的調用,它也會在整個代碼中刪除重複的URL。 – Alnitak

+0

@some_bloody_fool如果可能的話,我想看看你最終編寫的代碼(實際的代碼,你會轉到你的教授)。 – Jasper

回答

2

如果你的教授是最新的範例,你應該返回a(返回值爲$.getJSON)。

這是一個推遲對象,你可以將處理它,你任何時候請,而不必自己GetJSON()函數中附上他們。

如果您有總是希望發生的事情,把那些GetJSON()函數內部,並使用外部約束處理程序是唯一行動的共同行動:

function GetJSON() 
{ 
    var a = $.getJSON("/controller_name/action", null, function (z) { 
     ... 
    }); 

    // bind functions that you always want to happen here 
    a.fail(function(z) { 
     console.log("something bad happened"); 
    }); 

    return a; 
} 

var d = GetJSON(); 

// bind additional functions here 
d.done(
    // Success Action 
}) 
.fail(function (z) { 
    // Error Action 
}) 
.always(function (z) { 
    // Complete Action 
}); 

注意的jQuery 1.7已經過時.success.error.complete贊成上面使用的函數,以便與其他Deferred對象保持一致。

+0

請問您能否指點我正確的方向。你的意思是用z替換z?我認爲這只是一個變量? –

+1

@some_bloody_fool它是var a = $ .getJSON()''的'a'; – PeeHaa

+0

@HoeHoeHoe啊,我看到謝謝! –

1

我不會說這是實際上重複代碼恕我直言(除非你提出相同的請求和每次更新相同的元素)。如果回調en request url每次都不一樣,那麼真的不需要爲它編寫一個'wrapper'。

我將其視爲「原生」功能的方式。例如。例如,console.log()。你不想編寫一個函數來包裝它嗎?

這就是說,如果你真的需要/想要做到這一點,你只需要傳遞所有參數/回調函數。

+1

具有諷刺意味的是,在console.log()中包裝一個包裝可以防止在console.log未定義的環境中不可避免地發生的錯誤並破壞所有的錯誤... – Kzqai

相關問題