2014-01-16 3 views
1

В базовом примере полного набора кендо отображается настройка, в которой согласованные результаты поиска выбираются с помощью запроса Ajax. Загрузка ajax отлично работает, если запрашиваемый ресурс находится в том же домене, но мне было интересно, есть ли поддержка для настройки базовых запросов ajax для поддержки CORS. Есть ли способ передать параметры Ajax, как обычно, если вы используете $.ajax({}) напрямую.Настроить запрос Ajax, сделанный Kendo, для поддержки запроса ajax для перекрестных доменов

$("#products").kendoAutoComplete({ 
         dataTextField: "ProductName", 
         filter: "contains", 
         minLength: 3, 
         dataSource: { 
          type: "odata", 
          serverFiltering: true, 
          serverPaging: true, 
          pageSize: 20, 
          transport: { 
           read: "http://demos.kendoui.com/service/Northwind.svc/Products" 
          } 
         } 
        }); 
       }); 

Я в принципе хочу тот же четкий контроль над просьбой, как в обычном запросе JQuery Ajax (например, сильфонные):

jQuery.ajax({ 
       url: 'some url', 
       data: {id:id}, 
       contentType: 'application/json', 
       type: "Get", 
       xhrFields: { 
        withCredentials: true 
       }, 
       crossDomain: true 

      }) 
+0

Если домен отличается от другого, вам необходимо разрешить 'Access-Control-Allow-Origin' на удаленном домене для домена клиента. Это о безопасности –

+0

Я знаю. Служба уже настроена для поддержки этого. Мне просто нужно сделать запрос ajax, который поддерживает CORS – TGH

+0

, вы можете передать токен доступа в свои заголовки и проверить это на стороне сервера. Я занимаюсь разработкой системы входа в систему usin nodejs. Коммуникация, просто сделанная с использованием токена доступа, сгенерированного имени пользователя и пароля –

ответ

3

Решение присвоить свойство чтения методу, который оборачивает Аякса вызов, как так:

$("#search").kendoAutoComplete({ 
     dataTextField: "Name", 
     minLength: 1, 
     dataSource: { 
      type: "json", 
      serverFiltering: true, 
      transport: { 
       read: 
        function(options) { 
         $.ajax({ 
          url: "someUrl", 
          contentType: 'application/json', 
          data: { text: options.data.filter.filters[0].value }, 
          type: "Get", 
          xhrFields: { 
           withCredentials: true 
          }, 
          crossDomain: true, 
          success: function (result) { 
           options.success(result); 
          } 
         }); 
        } 
       } 
      } 
     } 
    }); 

Это дает возможность заменить поведение Аякса по умолчанию.

3

Вы можете установить на пользователя beforeSend метода;

$("#products").kendoAutoComplete({ 
     dataTextField: "ProductName", 
     filter: "contains", 
     minLength: 3, 
     dataSource: { 
      type: "odata", 
      serverFiltering: true, 
      serverPaging: true, 
      pageSize: 20, 
      transport: { 
       read: { 
        url: "http://demos.kendoui.com/service/Northwind.svc/Products", 
        type: 'POST', 
        beforeSend: function(req) { 
         req.setRequestHeader('Auth', your_token); 
        } 
       } 
      } 
     } 
    }); 
}); 
3

Вы можете достичь этого, установив withCredentials в значение true для свойства «xhrFields» считывателя, как показано ниже для определения источника данных.

dataSource: { 
        transport: { 
         read: { 
          xhrFields: { 
           withCredentials: true 
          }, 
          url: serviceURL 
         } 
        } 
       } 

Убедитесь, что вы уже установили SupportsCredentials = истина в настройках Корс в целевом сервере.
Надеюсь, это поможет

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