3

我正在尝试使用 DOJO AJAX 向 REST 服务器发送请求,但是我得到一个空对象作为结果(控制台):

You CLICKED = click clientX=34, clientY=13 JSON从服务器加载:null

这是我的代码:

// JavaScript Document

// load requirements for declarative widgets in page content
require([   "dojo/parser",
        "dojo/dom",
        "dojo/domReady!",
        "dijit/form/Button"
        ]);


// Start initializing
dojo.ready(function(){

dojo.connect (
                aBut1,
                "onClick",
                function(e){

                    console.log('You CLICKED = ', e);
                    dojo.xhrGet({
                                // The URL of the request
                                url: "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/find",
                                // Handle the result as JSON data
                                handleAs: "json",
                                // content
                                content: {f:"json", searchText:"new", contains:"true", searchFields:"state_new", layers:"2", returnGeometry:"false" },
                                // The success handler
                                load: function(jsonData) {
                                    // Create a local var to append content to
                                    console.info("JSON loaded from server:  ", jsonData);

                                },
                                // The error handler
                                error: function() {
                                    console.log('JSON log Error');
                                }
                            });

                });


}); // End dojo.ready

这是我想使用的 REST 网址:

http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/find?searchText=new&contains=true&searchFields=state_name&sr=&layers=2&returnGeometry=false&f=json

我将此 URL 的结果保存在一个 json 文件中,AJAX 会读取该文件并返回一个包含 4 个项目的对象。它没有使用 REST URL。

谢谢

4

2 回答 2

1

我相信您正在尝试使用 dojo.xhrGet 来访问不同的域,这是它无法做到的。

限制

dojo.xhrGet(以及同一行中的其他函数:dojo.xhrPost、dojo.xhrDelete、dojo.xhrPut)受浏览器的“同域”安全策略约束。这意味着他们只能建立与提供 HTML 页面的同一服务器的连接。如果您希望使用此 API 与发起页面的服务器以外的服务器通信,则必须在原始服务器上使用代理并让它转发请求。解决相同域限制的唯一其他解决方案是使用备用 IO 方法,例如 dojo.io.script。

http://dojotoolkit.org/reference-guide/1.7/dojo/xhrGet.html

于 2012-07-13T14:38:09.617 回答
0

这没什么好说的。如果您使用curl向该 URL 发出请求会发生什么?

您使用的是 Dojo 1.7 吗?如果是这样,也许Ajax 快速入门文档可以提供帮助(我直接链接到 AMD 样式,因为如果可以的话,这可能是您应该使用的)。上还有更详细的文档xhrGet

于 2012-07-13T14:21:00.600 回答