Javascript 在后台执行HTTP请求而不加载网页?
因此,这个第三方网站包含一个按钮,单击该按钮时,会发送GET请求,并执行一些服务器端任务,将登录用户的数据更新到其数据库中。必须在每个日历日执行所需的任务。有没有其他方法可以让此网站的服务器执行任务,而不让它在每个日历日加载页面?附加到该按钮的URL似乎使用REST API,因为button元素具有Javascript 在后台执行HTTP请求而不加载网页?,javascript,http,get,Javascript,Http,Get,因此,这个第三方网站包含一个按钮,单击该按钮时,会发送GET请求,并执行一些服务器端任务,将登录用户的数据更新到其数据库中。必须在每个日历日执行所需的任务。有没有其他方法可以让此网站的服务器执行任务,而不让它在每个日历日加载页面?附加到该按钮的URL似乎使用REST API,因为button元素具有hrefURL,其中包含路径+参数。目前,让它为我执行服务器端任务的解决方案是更改URL的参数并在新的浏览器选项卡中打开该URL 更准确地说,url看起来像这样:https://something.c
href
URL,其中包含路径+参数。目前,让它为我执行服务器端任务的解决方案是更改URL的参数并在新的浏览器选项卡中打开该URL
更准确地说,url看起来像这样:https://something.com/somepath/47240/6/sort?date=2018-03-06&crump=JMBuREVDPqS
我发现,只要将date参数改为第二天,并在浏览器中加载该URL,该网站的服务器也会在第二天执行所需的任务。有没有一种方法可以让它在后台执行此任务,而无需每天加载单独的选项卡,或者操纵date参数并在单独的选项卡中打开更新的URL是唯一的解决方案?因为我当前的方法只是打开更新的日期URL,所以它完全是通过客户端代码实现的。因此,我想知道仅使用客户端代码的替代解决方案 使用Ajax
var http = new XMLHttpRequest();
var url = "Put url here";
var params = 'Put Params here'
http.open("POST", [url,params].join('?'), true);
var url="https://something.com/somepath/47240/6/sort?date=";
var date1 = new Date();
var date2 = new Date(2018, 1, 1);
var day;
var between = [date1];
//Generate the date array for which you want to run
while(date2 <= date1) {
day = date1.getDate()
date1 = new Date(date1.setDate(--day));
between.push(date1);
}
//Covert date to string format for passing to the request url
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [year, month, day].join('-');
}
var callPage = function (dt) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
var urlWithParam=url+ dt + "&crumb=JMBuREVDPqS";
xhr.open('GET', urlWithParam, true);
xhr.onload = function () {
//Resolve the promise, so that next can be picked
resolve();
};
});
};
//Make the call for each date.
for (var i = 0; i < between.length; i++) {
callPage(between[i]).then(function () {
});
}
你可以这样做 1) 设置每天调用函数一次的间隔 2) 每天调用函数后,必须动态增加日期
var dayInMilliseconds = 1000 * 60 * 60 * 24;
var todayDate = new date();
function formatDate(todayDate ) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [year, month, day].join('-');
}
setInterval(function() {
$.get("https://something.com/somepath/47240/6/sort",
{"date":formatDate(todayDate),"crumb":"JMBuREVDPqS"},
function(response){
console.log("http request loaded in the background")'
});
},dayInMilliseconds );
var dayin毫秒=1000*60*60*24;
var todayDate=新日期();
函数formatDate(今天日期){
var d=新日期(日期),
月份=“”+(d.getMonth()+1),
日期=“”+d.getDate(),
year=d.getFullYear();
如果(月长<2)月='0'+月;
如果(日长<2)天='0'+天;
返回[年、月、日]。加入('-');
}
setInterval(函数(){
$.get(”https://something.com/somepath/47240/6/sort",
{“日期”:formatDate(todayDate),“crumb”:“JMBuREVDPqS”},
功能(响应){
log(“后台加载的http请求”)'
});
},以毫秒计);
尝试使用Ajax。您能更精确一点吗?我以前没有使用过AJAX,所以可能一些示例代码会有所帮助。这里使用的params
是什么?你声明了它,但没有使用它。用url+'?'+param替换url我认为它很常见,但不适合某人。我尝试使用这段代码在我制作的示例HTML页面上进行测试。在那个HTML页面中,我输入了一个硬编码的URL,其中一个日期的任务还没有执行。我使用onClick
将一个JS函数附加到它,该函数被调用,但在刷新第三方页面后,我没有看到任何变化。此外,您不必担心URL管理部分。我只是想要在onload
块下面提供我应该拥有的URLAmxhr.send(null)
来发出HTTP请求的代码?我已经用iframe实现更新了答案,您也可以检查一下。它应该对你有用。iFrame一个有效!谢谢谢谢谢谢!!您试图通过iframe访问的网站不属于您的域和X-Frame-Options:SAMEORIGIN将出现在标题中。我怀疑你们能否避免,这是一个由浏览器实现的安全功能,以避免点击劫持。但是对于您的场景,iframe不需要任何UI,因此可以忽略它。