提取URL调用显示Promise {<state>:“ pending”}

时间:2019-12-18 17:02:37

标签: javascript firefox get

为什么此网址提取无法正常工作?

实际上,此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。

不确定我的网址有什么问题吗?

3 个答案:

答案 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&paras=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}`) 
})

对于您的其他代码,这是您的代码返回的屏幕截图-

enter image description here

明确指出404(未找到)的位置,因此您的代码将进入错误处理程序。