我有一个.json文件,我试图将其导入为文本字符串。
这是确切的文件内容:
{ "type": "Polygon", "coordinates": [ [ [ 1.5887868, 50.8315241 ], [ 1.5830702, 50.8466931 ]....... ] ] ] }
我正在尝试使用它导入它:
jsonString = jQuery.get('./polygons/1.json', function(data) {
console.log(data);
});
然而,console.log(data)
作为一个数组出现,我不希望它 - 我只想要文本文本字符串,就像在文件中一样。
我如何做到这一点?
所以我的整个代码是:
jsonString = jQuery.get('./polygons/1.json', function(data) {
return JSON.stringify(data);
});
但现在我在下面看到这个截图:
我想这是我想要出去的responseText
。为什么jQuery.get
将所有这些额外信息添加到我的文件中?我做错了什么?
当有人花时间向我解释某些事情时,我总是感觉很糟糕,而我却不明白。 所以,这整个事情都存在,因此我可以将动态数据提取到jsonString
,具体取决于用户的需求。
现在,我必须通过制作具有地理数据坐标的单个文件,然后使用map.data.loadGeoJson('./maps_polygons/' + territory + '.json');
function mapClick(data) {
territory = data; //the section of the map that the user clicks on, e.g. `california` or `texas`
var mapOpt = {
center:new google.maps.LatLng(50.477971, 0.482999),
zoom:8,
};
map = new google.maps.Map(document.getElementById("googleMap"),mapOpt);
map.data.loadGeoJson('./maps_polygons/' + territory + '.json');
google.maps.event.addDomListener(window, 'load', initialize);
}
现在,这个工作,但我觉得必须非常低效,所以我想把所有坐标保存在一个文件中,并将它们作为主要输入动态地引入{ {1}}已更改。这可以让GOT成为可能,从你所有人展示的内容中,我可以编写function mapClick(data)
个查询,或者使用函数中的 ajax
,这样就可以了带上json字符串,但这对我没有好处,因为它被困在该函数内部,我无法达到它。
这是我的沮丧......
好的 - 向this page和this page以及@ Lye-Fish大喊大叫,最终帮助我了解这一切是如何运作的。
今晚在搜索SO时,我发现了很多关于这个主题方面的帖子,所以我想在最终让这两件事情发挥作用的时候就死了:
HTML
jQuery.get
Javascript
<area shape="poly" coords="..." href="#" alt="california" onClick="mapClick(alt)"/>
请注意,我没有在最终的function mapClick(data) {
territory = data;
function getPolygons(territory, passTodoWork) {
jQuery.get('./maps_polygons/'+ territory +'.json', function(data, status, jqXHR) {
var coordinates = JSON.parse(jqXHR.responseText);
passTodoWork(territory,coordinates);
});
}
function drawMap(firstItem, secondItem) {
var mapOpt = {
center:new google.maps.LatLng(50.367247, 2.745326),
zoom:8,
};
map = new google.maps.Map(document.getElementById("googleMap"),mapOpt);
map.data.addGeoJson(secondItem);
map.data.setStyle({
fillColor: '#2b86cc',
strokeColor: '#1e5c8c'
});
google.maps.event.addDomListener(window, 'load', initialize);
}
getPolygons(territory, drawMap);
}
函数中使用territory
- 这是另一段代码的一部分,这使得这个问题太长了,无法证明这一点......
答案 0 :(得分:5)
像这样使用JSON.stringify
console.log(JSON.stringify(data));
答案 1 :(得分:5)
首先,最重要的是,您的grep
变量不将保留响应。它将为请求保留jqXHR对象,最终会有响应,但您需要在回调中访问它。
其次,使用jsonString
是而不是正确的解决方案。将序列化形式的数据序列化是没有意义的。
JSON.stringify
对象包含jqXHR
属性,该属性将为您提供实际未解析的响应正文。您也不需要从该变量中获取它。你可以从第3个参数到回调。
.responseText
你所拥有的jQuery.get('./polygons/1.json', function(data, status, jqXHR) {
console.log(jqXHR.responseText);
});
声明什么也没做,所以我放弃了它。 return
不会阻止执行,这意味着您需要在回调中选择它。
如果您真的不想解析它,那么我建议您更改响应标头,以便jQuery不会实现它的JSON数据。我很确定这就是为什么它会自动为你解析它。
如果您更改标题:
jQuery.get
到此:
Content-Type: application/json
它应该有用。
或者您可以发出Content-Type: text/plain
请求,并指定jQuery.ajax
,这也可能有效。 "dataType: text"
确实为您提供了另一个可以覆盖猜测的参数,但它似乎仅限于jQuery.get
,xml
,json
或{{1 }}
要处理代码的异步性质,您需要在回调中选择执行。由于您可能不需要大量的应用程序代码,因此可以将其放在不同的函数中并调用它,并将数据传递给它。
html
如果同一类型的请求将用于不同的目的,您可以将其放在另一个函数中并传递一个回调函数,以便针对不同的情况进行调用。
script
如果您仍然无法使用jQuery执行您不想要的操作,请自行制作XHR请求。
jQuery.get('./polygons/1.json', function(data, status, jqXHR) {
console.log(jqXHR.responseText);
// do some other stuff in here
doWork(jqXHR.responseText);
});
function doWork(data) {
console.log("Now we have it here: ", data);
}
如果HTTP响应代码对您有意义,您还可以查看回调中的function getPolygons(callback) {
jQuery.get('./polygons/1.json', function(data, status, jqXHR) {
console.log(jqXHR.responseText);
// do some other stuff in here
callback(jqXHR.responseText);
});
}
function doWork(data) {
console.log("Now we have it here: ", data);
}
function doOtherWork(data) {
console.log("And now it's here: ", data);
}
getPolygons(doWork);
// ...some other part of the app...
getPolygons(doOtherWork);
。仅供参考,function getPolygons(callback) {
var xhr = new XMLHttpRequest()
xhr.open("GET", "./polygons/1.json", true);
xhr.onreadystatechange = function() {
if (this.readyState === 4) {
console.log(this.responseText);
// do some other stuff in here
callback(this.responseText);
}
};
xhr.send(null);
}
与this.status
变量持有的对象相同。
答案 2 :(得分:1)
我认为你可以使用$ .ajax作为.get正在使用它,并定义像这样的dataType,所以没有双重解析..
$.ajax({
url: './polygons/1.json',
method: "POST",
dataType: "text"
});