jquery - 发送前的jquery fileinput getlocation
问题描述
$("#upload-excel").fileinput({
required: true,
browseClass: "btn btn-secondary input-custom-query",
browseIcon: "",
removeClass: "btn btn-danger",
removeLabel: "",
removeIcon: "<i class='icon-trash-alt1'></i>",
showUpload: true,
uploadAsync: false,
uploadUrl: $('#upload-excel').attr('data-route'),
uploadExtraData:{
'_token': $('meta[name="csrf-token"]').attr('content')
},
allowedFileExtensions: ['xls', 'xlsx'],
maxFileSize: 264000
}).on('filebatchuploadsuccess', function (event, data) {
let result = data.response.data;
for (let i = 0; i < result.length; i++) {
markup(result[i][0].a, result[i][0].b, result[i][0].c);
}
$('#modal_result').modal('show');
}).on('filebatchuploaderror', function (event, data) {
alert('Err!');
});
我想用 uploadExtraData 发送位置,但地理位置正在异步工作。我应该怎么说在上传之前等待 getCurrentPosition?
我想在每次文件上传之前获取用户的经纬度信息。
if ("geolocation" in navigator) {
navigator.geolocation.getCurrentPosition(function(position) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
});
} else {
latitude = 0;
longitude = 0;
}
解决方案
考虑以下示例。
$("#upload-excel").fileinput({
required: true,
browseClass: "btn btn-secondary input-custom-query",
browseIcon: "",
removeClass: "btn btn-danger",
removeLabel: "",
removeIcon: "<i class='icon-trash-alt1'></i>",
showUpload: true,
uploadAsync: false,
uploadUrl: $('#upload-excel').attr('data-route'),
uploadExtraData: {
'_token': $('meta[name="csrf-token"]').attr('content')
},
allowedFileExtensions: ['xls', 'xlsx'],
maxFileSize: 264000
})
.on('filepreajax', function(event, previewId, index){
var coords = {
latitude: 0,
longitude: 0
};
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
coords = position.coords;
});
}
var extraData = $(this).data('fileinput').uploadExtraData;
$.extend(extraData, coords);
$(this).fileinput("uploadExtraData", extraData);
})
.on('filebatchuploadsuccess', function(event, data) {
let result = data.response.data;
for (let i = 0; i < result.length; i++) {
markup(result[i][0].a, result[i][0].b, result[i][0].c);
}
$('#modal_result').modal('show');
})
.on('filebatchuploaderror', function(event, data) {
alert('Err!');
});
这是完全未经测试的,因为我不使用这个插件。我假设您正在使用 Bootstrap FileInput。
另一种选择是在uploadExtraData
. 一个例子是:
uploadExtraData: function (previewId, index) {
var obj = {
'_token': $('meta[name="csrf-token"]').attr('content'),
'latitude': 0,
'longitude': 0
};
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
obj.latitude = position.coords.latitude;
obj.longitude = position.coords.longitude;
});
}
return obj;
}
无论是否移动,关键在于用户需要允许浏览器披露位置。当我在这里测试时:https ://www.w3schools.com/HTML/tryit.asp?filename=tryhtml5_geolocation我被提示阻止或允许在 FireFox 中显示我的位置。这意味着当您触发这段代码时,如果它处于用户无法允许活动或调整首选项的操作的中间,它可能会失败。
推荐阅读
- javascript - 为什么在“passport.authenticate()”之后添加“(req, res)”?
- powershell - 如何通过动态参数实现`DynamicParam`?
- php - 如何在所有刀片视图中获取全局用户配置文件数据?
- reactjs - React Native 和 Firestore
- python - 如何使用 tensorflow_io 的 IODataset?
- informix - 在 Informix 中选择每第 n 行?
- angular - Angular Reactive form:无法在表格中绑定动作
- php - 如何获取某个数组参数的值并将其放入另一个数组中?
- javascript - 如何有条件地为材质ui TreeView组件设置扩展道具
- reactjs - 如果用户来自浏览器 url 栏,NextJS 重定向不起作用