【问题标题】:Returning the HTTP response in javascript在 javascript 中返回 HTTP 响应
【发布时间】:2016-06-16 15:45:50
【问题描述】:

我在 javascript 中使用 XMLHttpRequest 向本地服务器发出 HTTP 请求。这是我正在使用的代码。

var xhr = new XMLHttpRequest();
xhr.open("POST", "//localhost:5000/translate", true); 
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
xhr.send(JSON.stringify({"sentence":str}));


xhr.onreadystatechange = processRequest;

function processRequest(e)
{
  if (xhr.readyState == 4)
  {
    console.log('trans_res set');
    trans_res = xhr.responseText; // here trans_res is a global variable
    return String(xhr.responseText);
  }
}

我希望这个函数返回 responseText 以便我可以在其他地方使用它。

为此我尝试了两种方法, 1)我尝试返回响应并在控制台中打印响应

var temp = function(string)
console.log(temp)

但是临时变量在控制台中是未定义的,我认为主要是因为在涉及到 console.log 之前它尚未设置(未返回响应)

2)我放了一个全局变量(trans_res)并在函数中设置并打印出来

var temp = function(string)
console.log(trans_res)

但它也未定义。

我怎样才能确保我返回响应,如果我需要在两者之间的某个地方停止执行也没关系,但我想要一个有效的响应。

【问题讨论】:

    标签: javascript xmlhttprequest


    【解决方案1】:

    您需要一把新螺丝刀。您向亚马逊发送请求,并使用您的邮箱 (trans_res) 发送到哪里。亚马逊正在与您同步工作。几分钟后,如果您在邮箱中查看,您将找不到螺丝刀。一个小时后,也是。 “邮箱”的问题是,你不知道看的时间。

    当 readyState 变为 4 时,您必须完成工作(显示、更改、通知)。

    【讨论】:

    • 是的,我明白了,你能建议一些方法来等待,以便在收到响应之前停止执行。
    • 这是个问题,停止 Javascript 意味着停止整个浏览器(选项卡)。没有多线程。您可以使用timer=window.setInterval( testMyResult, 250)function testMyResult()。它将每秒轮询您的“邮箱”4 次。如果结果到达,你必须window.clearInterval(timer)
    【解决方案2】:

    我认为@Holger 的回答有些正确。您正在检查函数实际生成的返回值。有时有很长的过程需要时间来产生价值。要么你应该专注于让函数更快,要么你应该继续检查返回的值。

    使用if-else 语句检查值。当它不是未定义时,记录它。 如果和 UX 相关,你可以在用户端使用加载轮动画。

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多