为什么在已定义变量时出现“未定义”错误

时间:2014-02-26 07:04:07

标签: jquery kendo-ui kendo-grid

 <link href="/content/shared/styles/examples-offline.css" rel="stylesheet">
 <link href="/styles/kendo.common.min.css" rel="stylesheet">
<link href="/styles/kendo.rtl.min.css" rel="stylesheet">
<link href="/styles/kendo.default.min.css" rel="stylesheet">

<script src="/js/jquery.min.js"></script>
<script src="/js/kendo.web.min.js"></script>
<script src="/content/shared/js/console.js"></script>
<script>
    $(function () {
        datasource123 = new kendo.data.DataSource({
            transport: {
                read: {
                     url:"http://localhost/KendoServices/Web/GetProductDetails",
                     dataType: 'jsonp'
                }
            }
        });
    });
    $('#products').kendoGrid({
        dataSource: datasource123
    });
</script>

获得例外:

  

'datasource123'undefined !!

2 个答案:

答案 0 :(得分:4)

文档就绪后才定义

datasource123,但dataSource: datasource123在此之前执行。我认为你可以将它移到文档准备就绪中并将变量作用于函数...

<script>
    $(function () {
        var datasource123 = new kendo.data.DataSource({
            transport: {
                read: {
                     url:"http://localhost/KendoServices/Web/GetProductDetails",
                     dataType: 'jsonp'
                }
            }
        });
        $('#products').kendoGrid({
            dataSource: datasource123
        });
    });
</script>

答案 1 :(得分:1)

您的DataSource的创建正在jQuery ready函数中完成,该函数在DOM准备好之前不会运行。您第一次使用datasource123即刻完成。因此,在您尝试使用datasource123之前,不会创建datasource123

我建议将此更改放在jQuery ready函数中并在给定范围内声明您的$(function () { var datasource123 = new kendo.data.DataSource({ transport: { read: { url:"http://localhost/KendoServices/Web/GetProductDetails", dataType: 'jsonp' } } }); $('#products').kendoGrid({ dataSource: datasource123 }); }); 变量,这样它就不是隐式全局变量:

{{1}}