如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 REST 请求的情况下在 GUI 中基于 dojo.store.jsonrest 对 Dojo DataGrids 进行排序?