使用带有jsonrest的dojo渲染到FilteringSelect时获取HTTP错误416

时间:2014-08-13 10:15:22

标签: dojo store

我在Dojo上很新鲜,现在尝试使用dojo / store / JsonRest渲染到FilteringSelect小部件,但不知道为什么得到416(请求范围不满足)并且错误消息是dijit.form.FilteringSelect RequestError:

Unable to load http://localhost:8080/DojoTutorial/DojoLabs/06-DijitsAndStores/06/data.json?value=* status: 416 

06TestPage.html

<script
type="text/javascript"
data-dojo-config="'parseOnLoad': false, 'async': true"
src="../../Shared/dojo18/dojo/dojo.js"          
></script>

<script
    type="text/javascript"
    src="06Test.js"
></script>
</head>

<body class="claro">
    <div id="selectBox"></div>
</body>

06 / data.json

[ { id: "ENG", value: "England" },
{ id: "SCOT", value: "Scotland" },
{ id: "WAL", value: "Wales" },
{ id: "NI", value: "Northern Ireland" }]

06Test.js

require(["dojo/store/JsonRest",
         "dijit/form/FilteringSelect",
         "dojo/parser",
         "dojo/domReady!"
         ], 
function(JsonRest, FilteringSelect, parser){ 
    var theApp = function(){
         var myStore = new JsonRest({target: "06/data.json", idProperty: "id"});
         var storeList = new FilteringSelect({store:myStore, searchAttr: "value"}, "selectBox");
    };

    parser.parse().then(theApp);
});

1 个答案:

答案 0 :(得分:0)

JsonRest存储将在对服务器的请求中放置Range标头。如果您在FilteringSelect显示下拉列表时查看Firebug(或您的开发工具),您应该看到带有如下标题的06 / data.json的GET请求:

Range: items=x-y

您的服务器负责处理此问题,并仅返回相应的项目。

我注意到Dojo有时会发送一个缺少第二个值的标题(上面的y)。因此发送到服务器的标头是:

Range: items=0-

我不知道这在技术上是否是有效的Range标头,但它确实发生了。

创建FilteringSelect时,可以设置pageSize,这似乎可以确保发送完整的Range标头。

var storeList = new FilteringSelect({
        store:myStore, 
        pageSize: 150, 
        searchAttr: "value"
    }, "selectBox");

由于您不想在FilteringSelect中使用“分页”(您只需要所有项目),只需将pageSize设置为您知道的所有项目即可。 (当然,在您的情况下,您只有一个静态文件,而不是REST服务器,因此Range标头无论如何都不重要。)