2014-04-22 2 views
0

Таким образом, эта функция отлично работает, у меня есть еще шесть кнопок и не хочу, чтобы мой код имел тонну кода повторения, так что есть способ вытащить вызов beforeSend и сделать его внешним обратным вызовом функционировать? Thank You In AdvanceВнешняя функция JQuery Ajax Callback

$('#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)); 

Больше вопросов!

У меня есть это тоже часть моего 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

Смежные вопросы