我在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);
});
答案 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标头无论如何都不重要。)