1

基本的剑道自动完成示例显示了通过 Ajax 请求获取匹配的搜索结果的设置。如果请求的资源在同一个域上,ajax 加载工作正常,但我想知道是否支持配置底层 ajax 请求以支持 CORS。如果您直接使用,是否有一种方法可以像通常那样传递 Ajax 选项$.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

            })
4

3 回答 3

5

解决方案是将读取属性分配给包装 ajax 调用的方法,如下所示:

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

这使您能够替换默认的 ajax 行为。

于 2014-01-16T20:05:49.333 回答
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);
                    }
                }
            }
        }
    });
});
于 2014-01-16T18:39:30.007 回答
3

您可以通过将读取器的属性“xhrFields”的 withCredentials 设置为 true 来实现,如下数据源定义。

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

确保您已经在目标服务器的 cors 设置中设置了SupportsCredentials = true
希望这可以帮助

于 2015-06-03T20:34:17.277 回答