Javascript 为什么可以';来自剑道数据源的t数据';s可观察对象是否记录到控制台?

Javascript 为什么可以';来自剑道数据源的t数据';s可观察对象是否记录到控制台?,javascript,kendo-ui,Javascript,Kendo Ui,我正在尝试从远程服务读取数据。当我使用.read()方法时,我可以在浏览器的网络选项卡上看到AJAX响应,但我不明白为什么不能将服务器的响应记录到浏览器的控制台 这是我的密码: var accountsListDs = new kendo.data.DataSource({ transport: { read: function() { $.ajax({ url: "http://localhost:8085/cab

我正在尝试从远程服务读取数据。当我使用
.read()
方法时,我可以在浏览器的
网络
选项卡上看到AJAX响应,但我不明白为什么不能将服务器的响应记录到浏览器的控制台

这是我的密码:

var accountsListDs = new kendo.data.DataSource({
    transport: {
        read: function() {
            $.ajax({
                url: "http://localhost:8085/cabinet/wicket/bookmarkable/com.office.web.services.AccountsService",
                dataType: "json",
                type: "POST",
                cache: false,
                data: {
                    op: "list"
                },
                success: function(){
                    console.log("DataSource Read Success");
                },
                error: function(){
                    console.log("DataSource Read Failed");
                }
            });
        },
        schema: {
            data: function(response) {
                return response;
            }
        }
    },
    requestEnd: function(e) {
         var response = e.response;
         console.log(response);        
    }
});
我从浏览器控制台手动运行了
accountsListDs.read()
。我从服务器得到了完美的响应。当我尝试执行
accountsListDs.data()
时,它返回一个空数组。我想,它会进行一个异步调用,因此
.data()
无法立即工作,我甚至尝试将它与
requestEnd
事件连接起来(如Kendo过于有用的文档中所述,但仍然没有成功)

即使我从剑道的文档中复制粘贴代码,它也不起作用

我错过了什么


(提前感谢您,使用Spike编码)

您可以,但是您没有传播通过
ajax
请求接收的数据。您应该使用收到的数据调用
op.success

var accountsListDs = new kendo.data.DataSource({
    transport: {
        read: function(op) {
            $.ajax({
                url: "http://localhost:8085/cabinet/wicket/bookmarkable/com.office.web.services.AccountsService",
                dataType: "json",
                type: "POST",
                cache: false,
                data: {
                    op: "list"
                },
                success: function(data){
                    console.log("DataSource Read Success");
                    op.success(data);
                },
                error: function(){
                    console.log("DataSource Read Failed");
                }
            });
        },
        schema: {
            data: function(response) {
                return response;
            }
        }
    },
    requestEnd: function(e) {
         var response = e.response;
         console.log(response);        
    }
});
下面的代码片段显示了idea的运行版本

$(文档).ready(函数(){
var dataSource=new kendo.data.dataSource({
运输:{
读:功能(op){
$.ajax({
url:“http://demos.telerik.com/kendo-ui/service/Products",
数据类型:“jsonp”,
成功:功能(数据){
log(“数据源读取成功”);
op.success(数据);
},
错误:函数(){
log(“数据源读取失败”);
}
});
}
},
requestEnd:函数(e){
var响应=e.响应;
控制台日志(响应);
},
批次:对,
页面大小:20,
模式:{
数据:功能(响应){
返回响应;
}
}
});
$(“#网格”).kendoGrid({
数据源:数据源,
pageable:对,
身高:550,
栏目:[
“产品名称”,
{字段:“单价”,标题:“单价”,格式:{0:c},宽度:120},
{字段:“单位库存”,标题:“库存单位”,宽度:120},
{字段:“中断”,宽度:120}
],
});
});


您的代码可以完美运行。我刚刚替换了url并发送了数据参数(也从jsonp切换到json),现在我得到了这个错误。屏幕截图:只要在同一台服务器上运行JSON,就可以使用它,否则会出现CORS(跨源资源共享)问题。您显示的似乎不是一个值数组。基本上,数据需要是一个数组,并且显示一个
状态
和一个名为
providerAccounts
的东西,它显示为
对象
。返回的数据在哪里?如果在
ajax
调用的
success
函数中显示收到的数据,您会看到什么?不,问题不是跨域限制。成功回调返回以下内容:{“status”:“Success”,“providerAccounts”:{“autoLogin”:[],“online”:[]}}我发现了我的错误。我需要先解析服务器响应,然后才能将其用于Kendo数据源。我接受你的解决方案作为答案。