2015-11-18 43 views
1

我想不通,爲什麼我的劍道自動完成構件不是在請求到服務器發送的授權頭:劍道自動完成授權頭

var dataSource = new kendo.data.DataSource({ 
    type: 'odata', 
    serverFiltering: true, 
    transport: { 
     read: { 
      url: myApiUrl, 
      type: 'GET', 
      beforeSend: function (xhr) { 
       xhr.setRequestHeader('Authorization', myAuthorizationValue); 
      } 
     } 
    } 
}); 

$('#myAutocompleteField').kendoAutoComplete({ 
    dataTextField: 'fieldName', 
    filter: 'contains', 
    minLength: 3, 
    dataSource: dataSource 
}); 

當我檢查在開發工具的服務器響應,我從服務器獲取401 Unauthorized錯誤。查看請求頭,我根本沒有看到Authorization屬性。

我需要做些什麼才能使授權標頭包含在請求中?

更新:

我繼續探討這個問題。如果我只是在Kendo DataSource參數中使用與transport.read相同的對象進行典型的$.ajax請求,它會發送這些頭並且我會得到一個成功的響應。

$.ajax({ 
    url: myApiUrl, 
    type: 'GET', 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader('Authorization', myAuthorizationValue); 
    }, 
    success: function(res) { 
     console.log('success!'); 
     console.log(res); 
    } 
}); 

回答

1

this forum post on Telerik forum,使用type: 'odata'當服務器期待與JSONP合作,並不會發送驗證頭。

評論指出,線,如以下,將發送驗證報頭,但是其發送的,而不是典型ODATA參數使用濾波器陣列所搜索查詢,(這使得有義):

var dataSource = new kendo.data.DataSource({ 
    //type: 'odata', // this causes the auth headers to not be sent 
    serverFiltering: true, 
    transport: { 
     read: { 
      url: myApiUrl, 
      type: 'GET', 
      beforeSend: function (xhr) { 
       xhr.setRequestHeader('Authorization', myAuthorizationValue); 
      } 
     } 
    } 
}); 

// Parameters sent 
filter[filters][0][value]:sprint 
filter[filters][0][operator]:contains 
filter[filters][0][field]:fieldName 
filter[filters][0][ignoreCase]:true 
filter[logic]:and 

有趣的是,我在互聯網上的其他地方發現有人使用type: 'odata-v4',它確實發送了Auth頭文件並正確發送了ODATA過濾器參數。

var dataSource = new kendo.data.DataSource({ 
    type: 'odata-v4', 
    serverFiltering: true, 
    transport: { 
     read: { 
      url: myApiUrl, 
      type: 'GET', 
      beforeSend: function (xhr) { 
       xhr.setRequestHeader('Authorization', myAuthorizationValue); 
      } 
     } 
    } 
}); 

// Parameters Sent 
$format:json 
$filter:contains(tolower(fieldName),'sprin') // sprin is the search string 
$count:true