XMLHttpRequest 问题或服务器设置问题加载 gpx 文件
problems with XMLHttpRequest or is a server setting problem loading a gpx file
我是意大利人,在 javascripting 和服务器端规则配置方面几乎是个新手。我正在创建一个网页,并打算使用 gpxtruder.xyz.
的部分代码
我已获得所有者 (Jim Denova jim@anoved.net) 的许可使用原始代码,因为它是在开源许可下发布的。
在index.html页面代码如下:
<form enctype="multipart/form-data" method="get" name="gpxform">
<p><input type="radio" name="gpxsource" value="0" id="gpxsource_upload" onchange="return toggle(event, 0, 'gpxfile') && toggle(event, 1, 'gpxsample');" />
<label for="gpxsource_upload">Upload GPX:</label>
<input type="file" id="gpxfile" /><br />
<input type="radio" name="gpxsource" value="1" id="gpxsource_sample" onchange="return toggle(event, 0, 'gpxfile') && toggle(event, 1, 'gpxsample');" checked />
<label for="gpxsource_sample">Sample GPX:</label>
<select id="gpxsample">
<option value="0" selected>South Mountain</option>
<option value="1">Vestal XX (20k road race)</option>
</select>
<h1>Hello, my name is <span id="name"></span></h1>
<script>
let gpxsource = "1"
let name = gpxsource;
document.getElementById("name").innerHTML = name;
</script>
您可以选择预先选择的曲目来显示结果或加载您自己的 gpx 文件
参数发送到gpxtruder.js文件,后面是部分代码处理数据
代码的第一部分
if (radioValue(form.gpxsource) === 0) {
// Assign a local URL to the file selected for upload
// https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL
var files = document.getElementById('gpxfile').value;
window.alert(gpxfile);
//var files = document.getElementById('gpxfile').files;
window.alert(files);
if (files.length === 0) {
Messages.error('No GPX file selected.');
return;
}
// upload_url = window.URL.createObjectURL(files[0]);
upload_url = files
} else {
if (parseInt(form.gpxsample.value) === 0) {
upload_url = "https://gpxtruder.xyz/gpx/SouthMtn.gpx";
} else if (parseInt(form.gpxsample.value) === 1) {
upload_url = "https://gpxtruder.xyz/gpx/VXX.gpx";
} else {
return;
}
}
window.alert(upload_url);
window.alert(options);
loader(options, upload_url);
if (radioValue(form.gpxsource) === 0) {
window.URL.revokeObjectURL(upload_url);
}
代码的第二部分
var loader = function(options, gpx_url) {
window.alert(gpx_url);
Messages.clear();
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState === 4 /*&& req.status == 200*/) {
if (!req.responseXML) {
Messages.error("This doesn't appear to be a GPX file.");
return;
}
window.alert(req.responseXML);
// Attempt to parse response XML as a GPX file.
var pts = Parser.file(req.responseXML, options.zoverride, options.zconstant);
if (pts === null) {
return;
}
// If all is well, proceed to extrude the GPX path.
g = new Gpex(options, pts);
}
};
// submit asynchronous request for the GPX file
req.open('GET', gpx_url, true);
req.overrideMimeType("text/xml");
req.send();
};
如果我更改 url 地址并插入我的服务器网站 space,我的问题与 upload_url = "https://gpxtruder.xyz/gpx/VXX.gpx";
严格相关,我在其中托管 gpx 文件,即使我使用原始文件,页面回答“这似乎不是 GPX 文件。”
我没有发现问题可能是什么。
可能是 javascript 相关的问题? (但是代码和文件完全是原始文件的复制品)或者可能是托管 gpx 文件的服务器端配置问题?
可以找到原始文件
https://gpxtruder.xyz/index.html
https://gpxtruder.xyz/js/gpxtruder.js
感谢您的帮助,如果可能的话。
问题出在服务器端配置上,确切地说是:
CORS header 'Access-Control-Allow-Origin' 缺失
我是新手,不知道浏览器控制台是如何工作的以及有什么用处
通过 .htaccess 解决
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
我是意大利人,在 javascripting 和服务器端规则配置方面几乎是个新手。我正在创建一个网页,并打算使用 gpxtruder.xyz.
的部分代码我已获得所有者 (Jim Denova jim@anoved.net) 的许可使用原始代码,因为它是在开源许可下发布的。
在index.html页面代码如下:
<form enctype="multipart/form-data" method="get" name="gpxform">
<p><input type="radio" name="gpxsource" value="0" id="gpxsource_upload" onchange="return toggle(event, 0, 'gpxfile') && toggle(event, 1, 'gpxsample');" />
<label for="gpxsource_upload">Upload GPX:</label>
<input type="file" id="gpxfile" /><br />
<input type="radio" name="gpxsource" value="1" id="gpxsource_sample" onchange="return toggle(event, 0, 'gpxfile') && toggle(event, 1, 'gpxsample');" checked />
<label for="gpxsource_sample">Sample GPX:</label>
<select id="gpxsample">
<option value="0" selected>South Mountain</option>
<option value="1">Vestal XX (20k road race)</option>
</select>
<h1>Hello, my name is <span id="name"></span></h1>
<script>
let gpxsource = "1"
let name = gpxsource;
document.getElementById("name").innerHTML = name;
</script>
您可以选择预先选择的曲目来显示结果或加载您自己的 gpx 文件
参数发送到gpxtruder.js文件,后面是部分代码处理数据 代码的第一部分
if (radioValue(form.gpxsource) === 0) {
// Assign a local URL to the file selected for upload
// https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL
var files = document.getElementById('gpxfile').value;
window.alert(gpxfile);
//var files = document.getElementById('gpxfile').files;
window.alert(files);
if (files.length === 0) {
Messages.error('No GPX file selected.');
return;
}
// upload_url = window.URL.createObjectURL(files[0]);
upload_url = files
} else {
if (parseInt(form.gpxsample.value) === 0) {
upload_url = "https://gpxtruder.xyz/gpx/SouthMtn.gpx";
} else if (parseInt(form.gpxsample.value) === 1) {
upload_url = "https://gpxtruder.xyz/gpx/VXX.gpx";
} else {
return;
}
}
window.alert(upload_url);
window.alert(options);
loader(options, upload_url);
if (radioValue(form.gpxsource) === 0) {
window.URL.revokeObjectURL(upload_url);
}
代码的第二部分
var loader = function(options, gpx_url) {
window.alert(gpx_url);
Messages.clear();
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState === 4 /*&& req.status == 200*/) {
if (!req.responseXML) {
Messages.error("This doesn't appear to be a GPX file.");
return;
}
window.alert(req.responseXML);
// Attempt to parse response XML as a GPX file.
var pts = Parser.file(req.responseXML, options.zoverride, options.zconstant);
if (pts === null) {
return;
}
// If all is well, proceed to extrude the GPX path.
g = new Gpex(options, pts);
}
};
// submit asynchronous request for the GPX file
req.open('GET', gpx_url, true);
req.overrideMimeType("text/xml");
req.send();
};
如果我更改 url 地址并插入我的服务器网站 space,我的问题与 upload_url = "https://gpxtruder.xyz/gpx/VXX.gpx";
严格相关,我在其中托管 gpx 文件,即使我使用原始文件,页面回答“这似乎不是 GPX 文件。”
我没有发现问题可能是什么。
可能是 javascript 相关的问题? (但是代码和文件完全是原始文件的复制品)或者可能是托管 gpx 文件的服务器端配置问题?
可以找到原始文件
https://gpxtruder.xyz/index.html
https://gpxtruder.xyz/js/gpxtruder.js
感谢您的帮助,如果可能的话。
问题出在服务器端配置上,确切地说是: CORS header 'Access-Control-Allow-Origin' 缺失
我是新手,不知道浏览器控制台是如何工作的以及有什么用处
通过 .htaccess 解决
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>