2014-04-22 134 views
0

所以這個函數完美地工作,我有6個更多的按鈕,不希望我的代碼有大量的重複代碼,所以有辦法拉出beforeSend調用,並使其成爲一個外部回調功能?提前致謝Jquery Ajax回調外部函數

$('#button_status').on 'click', -> 
username = $('#login_username').val() 
password = $('#login_password').val() 
mac_id = $('#login_mac').val() 

$.ajax 
    type: "GET" 
    url: start_url + mac_id + "/status" 
    dataType: "json" 
    crossDomain: true 
    cache: false 

    beforeSend: (xhr) -> 
    xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ":" + password)); 

!More to Question!

我有這也是我的ajax的一部分,但如果我讓所有的按鈕有相同的回調錯誤信息將是相同的和毫無意義的。我可以爲每個按鈕進行自定義嗎?謝謝!

error: (xhr, ajaxOptions, thrownError) -> 
    console.dir arguments 
    console.log("*| Status ", xhr.status) 
    console.log("*| Error", thrownError) 
    console.log("*| Ajax", ajaxOptions) 
    if (not username? or not password?) 
     $('#data-text').empty() 
     $('#data-text').append ("""<h1>Please Log In</h1>""") 
     $('#input_username').fadeTo(100, 0.1).fadeTo(200, 1.0); 
     $('#input_password').fadeTo(100, 0.1).fadeTo(200, 1.0); 
     $('#header_user').css "background-color": "#d34242" 
     $('#header_password').css "background-color": "#d34242" 
     $('#data-text').css "background-color": "#d38642" 
    else 
     $('#data-text').empty() 
     $('#data-text').append ("""<h1>Failed Log In</h1>""") 
     $('#input_username').fadeTo(100, 0.1).fadeTo(200, 1.0); 
     $('#input_password').fadeTo(100, 0.1).fadeTo(200, 1.0); 
     $('#header_user').css "background-color": "#d34242" 
     $('#header_password').css "background-color": "#d34242" 
     $('#data-text').css "background-color": "#d38642" 
+1

另外要注意的是,這段代碼是用CoffeeScript編寫的。 – TheAce

回答

0

當然

callback = (xhr) -> xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ":" + password)) 
beforeSend: callback 

只要確保變量範圍的一部分。 CoffeScript的功能範圍。

+0

謝謝!這工作,我會投票,但可悲的是我沒有足夠的分數。但我會盡快接受 – TheAce

+0

您可以選擇它作爲答案。還有一件事,分號不屬於coffescript。我會更新我的答案。 – beautifulcoder

+0

你介意幫助我使用這個錯誤函數來創建一個可定製的回調? – TheAce

0

你不能把beforeSend變成函數嗎?

var onBeforeSend = function(xhr) { 
    xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ":" + password)); 
} 

然後執行:

$.ajax 
    type: "GET" 
    url: start_url + mac_id + "/status" 
    dataType: "json" 
    crossDomain: true 
    cache: false, 
    beforeSend: onBeforeSend 

這不是CoffeeScript的,但是這就是我如何與普通的JavaScript做到這一點。

會這樣的工作?

onBeforeSend = (xhr) -> 
    xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ":" + password)); 

$.ajax '/Foo/Bar/', 
    type: "GET" 
    url: start_url + mac_id + "/status" 
    dataType: "json" 
    crossDomain: true 
    cache: false, 
    beforeSend: (xhr) -> 
     onBeforeSend xhr 
+0

beforeSend:onBeforeSend 不會悲傷地使用coffeescript。 – TheAce

+0

未定義函數是我的錯誤,但@beautifulcoder是正確的。 – TheAce