如何使用 DOJO AJAX 和 REST 解析 JSON

Posted

技术标签:

【中文标题】如何使用 DOJO AJAX 和 REST 解析 JSON【英文标题】:How to parse JSON using DOJO AJAX and REST 【发布时间】:2012-07-13 14:06:09 【问题描述】:

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

您 CLICKED = 点击 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。

谢谢

【问题讨论】:

【参考方案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

【讨论】:

【参考方案2】:

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

您使用的是 Dojo 1.7 吗?如果是这样,也许Ajax Quickstart docs 可以提供帮助(我直接链接到 AMD 风格,因为如果可以的话,这可能是你应该使用的)。还有更详细的docs on xhrGet

【讨论】:

以上是关于如何使用 DOJO AJAX 和 REST 解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ajax 和 Dojo 轮询服务器

如何在没有 REST 请求的情况下在 GUI 中基于 dojo.store.jsonrest 对 Dojo DataGrids 进行排序?

Dojo 1.7 Ajax 内容和 AMD 要求

PHP 脚本如何向 Dojo 的 xhrGet 发送 JSON Ajax 响应?

如何使用简单的 Dojo 1.8 构建?

ajax 请求后重新加载 dojo 小部件