为什么此网址提取无法正常工作?
实际上,此GET方法正在传递一些错误消息以进行存储:
fetch('http://www.govtschemes.in/pushlo90.php?msg=alert-bid:0.120148336001477231576473857578-Please%20enter%20correct%20captcha', {
method: 'get'
}).then(function(response) {
}).catch(function(err) {
// Error :(
});
但是,如果我在浏览器中输入相同的URL(http://www.govtschemes.in/pushlo90.php?msg=alert-bid:0.120148336001477231576473857578-Please%20enter%20correct%20captcha),它将起作用。
在WebExension中的其他一些地方,它仍然可以正常工作。
但不能在其他地方工作。另外,当我在Firefox控制台中输入时,它也不起作用。它显示了一些“待定”。
此功能也显示相同的行为:
function ff_httpGetAsync(theUrl, callback, failed_cb) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
// console.log("Successfully downloaded the ajax page");
if (callback) {
if (xmlHttp.responseURL == theUrl) {
callback(xmlHttp.response);
} else {
console.log("diff response url received" + xmlHttp.responseURL);
}
}
} else {
// console.log("Got status =", xmlHttp.status);
}
}
xmlHttp.open("GET", theUrl, true); // true for asynchronous
console.log("Gettiy :" + theUrl);
xmlHttp.send(null);
}
ff_httpGetAsync('http://www.govtschemes.in/pushlo90.php?msg=alert-bid:0.120148336001477231576473857578-Please%20enter%20correct%20captcha', function() {
}, function() {});
我已经检查了服务器。在这种情况下,不会调用后端pushlo90.php。
不确定我的网址有什么问题吗?
答案 0 :(得分:7)
该结果告诉您承诺尚未兑现。在某些情况下,在呈现页面之前非常迅速地处理了承诺,这可能会起作用。
使用诺言,您基本上会说“答应我,您会做的”。这个承诺要么被解决,要么被拒绝。在解决或拒绝之前,它始终处于待处理状态。
在您的第一个函数中添加一些日志记录应该可以解释。
fetch('http://www.govtschemes.in/pushlo90.php?msg=alert-bid:0.120148336001477231576473857578-Please%20enter%20correct%20captcha', {
method: 'get'
}).then(function(response) {
console.log(response) //do something with response data the promise gives as result
}).catch(function(err) {
console.log(err)// Error :(
});
如果您不想使用.then(),请使用async / await。
const functionName = async () => {
const result = await fetch(
"http://www.govtschemes.in/pushlo90.php?msg=alert-bid:0.120148336001477231576473857578-Please%20enter%20correct%20captcha",
{
method: "get"
}
);
console.log(result); //this will only be done after the await section, since the function is defined as async
};
functionName();
答案 1 :(得分:0)
fetch函数返回一个诺言,当解决时返回一个HTTP响应。然后,您可以访问HTTP响应示例:
fetch(`https://baconipsum.com/api/?type=all-meat¶s=2&start-with-lorem=1`)
.then(response => {
// HTTP response which needs to be parsed
return response.json()
})
// accessing the json
.then(json =>console.log(json))
所以您必须问自己的问题是:通话返回了什么? 另外请注意404和其他HTML错误代码不会导致对诺言的拒绝,所以不要为catch烦恼。
有关更多详细信息,请参见https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
答案 2 :(得分:0)
因此,您的问题中显示的代码块是-
fetch('http://www.govtschemes.in/pushlo90.php?msg=alert-bid:0.120148336001477231576473857578-Please%20enter%20correct%20captcha', {
method: 'get'
}).then(function(response) {
}).catch(function(err) {
// Error :(
});
因此,所谓的获取模块将向请求中提供的URL发送GET请求,并且响应或错误将进入相应的链接函数。
错误可能是404(未找到)或401(未授权)等。
要检查错误,请在HTTP请求处理程序中进行一些记录。
fetch('http://www.govtschemes.in/pushlo90.php?msg=alert-bid:0.120148336001477231576473857578-Please%20enter%20correct%20captcha', {
method: 'get'
}).then(function(response) {
console.log(`Response is {response}`)
}).catch(function(err) {
console.log(`Error is {err}`)
})
对于您的其他代码,这是您的代码返回的屏幕截图-
明确指出404(未找到)的位置,因此您的代码将进入错误处理程序。