【发布时间】:2014-12-01 16:40:47
【问题描述】:
好的,所以我正在使用 API,目前我正在使用 geonames api。我的问题是它工作正常,直到...
让我解释一下,当我这样写代码时
$(document).ready(function() {
Date.prototype.dateToString = function() {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]); // padding
};
var d = new Date();
var date = d.dateToString();
$.ajax({
dataType: "json",
url: url
}).then(function(data){
var latitude = data.geonames[0].lat;
var longitude = data.geonames[0].lng;
var north = parseFloat(latitude) + 1;
var south = parseFloat(latitude) - 1;
var east = parseFloat(longitude) + 1;
var west = parseFloat(longitude) - 1;
var uri = encodeURI("http://api.geonames.org/earthquakesJSON?north=" + north + "&south=" + south + "&east=" + east + "&west=" + west + "&date=" + date +"&username=demo");
$.ajax({
dataType: "json",
url: uri
}).then(function(eData){
var myLatlng = new google.maps.LatLng(parseFloat(data.geonames[0].lat), parseFloat(data.geonames[0].lng));
function initialize() {
var mapProp = {
center : myLatlng,
minzoom: 1,
maxzoom: 20,
zoom : 7,
mapTypeId : google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("googleMap"),
mapProp);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Search Location\nLatitude: ' + data.geonames[0].lat + '\nLongitude: ' + data.geonames[0].lng
});
for(item = 0; item < eData.earthquakes.length; item++){
if (eData.earthquakes.length > 0){
var eLat = eData.earthquakes[item].lat, eLng = eData.earthquakes[item].lng;
} else {
var eLat = '', eLng = '';
}
new google.maps.Marker({
position: new google.maps.LatLng(eLat,eLng),
map: map,
title: 'Date and Time: '+eData.earthquakes[item].datetime+'\nMagnitude: '+eData.earthquakes[item].magnitude+'\nDepth: '+eData.earthquakes[item].depth+'\nLat: '+eData.earthquakes[item].lat+'\nLong: '+eData.earthquakes[item].lng
});
}
}
initialize();
});
});
});
它可以正常工作,在页面按预期出现时加载,但是如果我将它包装在这样的函数中
function getSearch(url){
$(document).ready(function() {
Date.prototype.dateToString = function() {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]); // padding
};
var d = new Date();
var date = d.dateToString();
$.ajax({
dataType: "json",
url: url
}).then(function(data){
var latitude = data.geonames[0].lat;
var longitude = data.geonames[0].lng;
var north = parseFloat(latitude) + 1;
var south = parseFloat(latitude) - 1;
var east = parseFloat(longitude) + 1;
var west = parseFloat(longitude) - 1;
var uri = encodeURI("http://api.geonames.org/earthquakesJSON?north=" + north + "&south=" + south + "&east=" + east + "&west=" + west + "&date=" + date +"&username=demo");
$.ajax({
dataType: "json",
url: uri
}).then(function(eData){
var myLatlng = new google.maps.LatLng(parseFloat(data.geonames[0].lat), parseFloat(data.geonames[0].lng));
function initialize() {
var mapProp = {
center : myLatlng,
minzoom: 1,
maxzoom: 20,
zoom : 7,
mapTypeId : google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("googleMap"),
mapProp);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Search Location\nLatitude: ' + data.geonames[0].lat + '\nLongitude: ' + data.geonames[0].lng
});
for(item = 0; item < eData.earthquakes.length; item++){
if (eData.earthquakes.length > 0){
var eLat = eData.earthquakes[item].lat, eLng = eData.earthquakes[item].lng;
} else {
var eLat = '', eLng = '';
}
new google.maps.Marker({
position: new google.maps.LatLng(eLat,eLng),
map: map,
title: 'Date and Time: '+eData.earthquakes[item].datetime+'\nMagnitude: '+eData.earthquakes[item].magnitude+'\nDepth: '+eData.earthquakes[item].depth+'\nLat: '+eData.earthquakes[item].lat+'\nLong: '+eData.earthquakes[item].lng
});
}
}
initialize();
});
});
});
}
我收到此错误....
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote
resource at http://api.geonames.org/searchJSON?q=Fukushima&maxRows=10&username=demo.
This can be fixed by moving the resource to the same domain or enabling CORS.
我没有做足够的服务器端或使用 API 来确切知道这意味着什么,或者为什么它发生的唯一时间是我试图从表单中调用此方法。
编辑:::
在键入此内容时,我意识到不是函数中的包装在执行此操作,而是在提交表单时更改了 URL,因此在错误中提到了域,我应该放慢速度读得好一点。但是,由于我是在 javascript 和 ajax 中执行此操作的,所以我想知道,因为我知道可以在不调用服务器的情况下完成表单处理,我将如何去做。
我明白如果没有人给出直接的答案,我实际上更喜欢没有人直接回答,而是向我指出使用 javascript 和 ajax 处理客户端表单的文档方向,并简要说明或使用它的历史。
谢谢大家!
【问题讨论】:
标签: javascript jquery ajax webforms form-submit