2012-10-30 77 views
8

我們正試圖實現在選擇二阿賈克斯遠程數據加載: -傳遞自定義頁眉到Ajax請求上選擇二

$scope.configPartSelect2 = { 
     minimumInputLength: 3, 
     ajax: { 
      url: "/api/Part", 
      // beforeSend: function (xhr) { xhr.setRequestHeader('Authorization-Token', http.defaults.headers.common['Authorization-Token']); }, 
      // headers: {'Authorization-Token': http.defaults.headers.common['Authorization-Token']}, 
      data: function (term, page) { 
       return {isStockable: true}; 
      }, 
      results: function (data, page) { 
       // parse the results into the format expected by Select2. 
       // since we are using custom formatting functions we do not need to alter remote JSON data 
        return { results: data }; 

      } 
     } 
    }; 

我們使用AngularJS。 對於每個Http請求,我們都設置了默認的Authtoken作爲頭。 但不知何故,它不會與Select2 Ajax請求一起使用。在上面的代碼中,評論代碼是我失敗的嘗試。

+0

接受的答案可能是在2012年的唯一選擇,但今天[這個答案](http://stackoverflow.com/a/28793936/ 971557)應該適合每個人。 –

回答

5

從選擇2的演示頁摘自:

選擇二將通過在Ajax對象,以jQuery的$就功能的選項,或傳輸功能,您指定。

使用JQuery 2+,我能夠成功設置OAuth 2.0和Content-Type標頭。

ajax: { 
    headers: { 
     "Authorization" : "Bearer "+Cookies.get('accessToken'), 
     "Content-Type" : "application/json", 
    }, 
} 
3

我通過提供自定義傳輸方法解決了我的上述問題.. 然後我被卡住的鼠標懸停下拉項沒有被選中&下拉項沒有被點擊後被選中。調試後我發現proeprty「id」是必須在返回的json對象中。

下面是我的代碼: -

var fetchPart = function (queryParams) { 

     var result = http.get(queryParams.url, queryParams.data).success(queryParams.success); 

    result.abort = function() { 
     return null; 
    }; 
    return result; 
}; 

var partFormatResult = function (part) { 
    return "<div><h4>" + part.PartNumber + "</h4><p>"+ part.PartDescription + "</p></div>"; 
}; 

var partFormatSelection = function (part, container) { 
    console.log(part.Id + "number - " + part.PartNumber); 
    return part.PartNumber; 
// return part.PartNumber; 
    //return part.Id; 
}; 

$scope.configPartSelect2 = { 
    minimumInputLength: 3, 
    ajax: { 
     url: "/api/Part", 
     data: function (term, page) { 
      return { params: { isStockable: true, query: term, pageNo: page } }; 
     }, 
     transport: fetchPart, 
     results: function (data, page) { 
      console.log("result is called by select2"); 
      var more = (page * 10) <= data.length; // whether or not there are more results available 
      return { results: data, more: more }; 
     } 
    }, 
    formatResult: partFormatResult, 
    formatSelection: partFormatSelection, 
    dropdownCssClass: "bigdrop" // apply css that makes the dropdown taller 
}; 
14

這是我固定如何發送身份驗證令牌。只需將其添加爲Select2 ajax參數;

transport: function(params){ 
    params.beforeSend = function(request){ 
     request.setRequestHeader("Authorization", 'OAuth ' + api_access_token); 
    }; 
    return $.ajax(params); 
}, 
+0

謝謝。這是非常有用:) – thangchung

+2

謝謝,這是唯一的解決方案,爲我工作! – Rob

+0

它沒有任何改變。 – itzmukeshy7

5

另一種選擇:

ajax: { 
    url: '/api/Part', 
    params: { headers: { "Authorization": "XXX" } }, 
    ... 
} 
0

你可以這樣做:

transport: function (params, success, failure) { 

    params.beforeSend = function (request) { 
     request.setRequestHeader("Authorization-Token", http.defaults.headers.common['Authorization-Token']); 
    }; 
    var $request = $.ajax(params); 

    $request.then(success); 
    $request.fail(failure); 

    return $request; 
}