我正在使用ArcGIS,Esri请求,我正在尝试从网络服务器获取数据,但每次我都得到相同的"意外的令牌:"即使我的回答是正确的,也会出错。
提前致谢。
这是我的代码:
require(["dojo/dom", "dojo/on", "dojo/dom-class", "dojo/_base/json", "esri/urlUtils", "esri/config", "esri/request", "dojo/domReady!"], function(dom, on, domClass, dojoJson, urlUtils, esriConfig, esriRequest) {
// fallback to proxy for non-CORS capable browsers
// esri.config.defaults.io.proxyUrl = "/arcgisserver/apis/javascript/proxy/proxy.ashx";
esriConfig.defaults.io.proxyUrl = "/proxy/proxy.ashx";
dom.byId("url").value = "http://api.citybik.es/v2/networks/dublinbikes";
dom.byId("content").value = "";
//handle the Go button's click event
on(dom.byId("submitRequest"), "click", getContent);
function getContent(){
var contentDiv = dom.byId("content");
contentDiv.value = "";
domClass.remove(contentDiv, "failure");
dom.byId("status").innerHTML = "Downloading...";
// //get the url
// var url = urlUtils.urlToObject(dom.byId("url").value);
// console.log("EL URL path",url.path)
// console.log("EL URL query",url.query)
// var requestHandle = esriRequest({
// "url": url.path,
// "content": url.query
// });
// requestHandle.then(requestSucceeded, requestFailed);
function requestSucceeded(data) {
console.log(data);
}
function requestFailed(error) {
console.log("Error: ", error.message);
}
var request = esriRequest({
url: "http://api.citybik.es/v2/networks/dublinbikes",
content: {
format: "json"
},
handleAs: "json",
callbackParamName: "retrive"
});
request.then(requestSucceeded, requestFailed);
}
}
);
我得到了:
未捕获的SyntaxError:意外的令牌:dublinbikes:2
答案 0 :(得分:3)
根本问题是,您esri.request
对您要求的内容以及服务器回馈的内容感到困惑。由于您在其他域(api.citybik.es
)上从您运行代码的地方(无论您的主机是什么)发出请求,因此您需要使用以下任一项:
绕过浏览器的安全限制。关于这些问题的详细信息很多,我不会再进一步运。
您的代码配置了两种方法 - callbackParamName
告诉esri.request
使用JSONP,并且您还有一个代理集以防万一。 callbackParamName
告诉它只使用JSONP,因此忽略代理。
正如我在上面的评论中所指出的那样,真正的问题是CityBikes API的v2实际上似乎并不支持JSONP,因此您的回调参数会被忽略,服务器会让您直接返回JSON。 esri.request
期待JSONP,而且意外的令牌:
。请求
http://api.citybik.es/v2/networks/dublinbikes?callback=stackoverflow
返回:
{
network: {
company: "JCDecaux",
href: "/v2/networks/dublinbikes",
....
请参阅?没有提到我们的stackoverflow
变量。如果你改为v1 of the API,那就支持JSONP。请求
http://api.citybik.es/dublinbikes.json?callback=stackoverflow
返回:
stackoverflow(
[
{
bikes: 1,
name: "Fenian Street",
idx: 0,
....
...还有我们的stackoverflow
变量。或者您可以从callbackParamName
中删除esriRequest
,然后查看您的代理是否会从v2地址处理JSON。