在javascript中返回HTTP响应

时间:2016-06-16 07:03:24

标签: javascript xmlhttprequest

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

index_list = []                                                          
for model_index in self.tableView.selectionModel().selectedRows():       
    index = QtCore.QPersistentModelIndex(model_index)         
    index_list.append(index)                                             

for index in index_list:                                      
     self.model.removeRow(index.row())                                                               

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

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

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);
  }
}

但临时变量在控制台中未定义,大多数情况下我认为这是因为在它来到console.log之前它尚未设置(响应未返回)

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

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

然而它也是未定义的。

如何确保我返回响应,如果我需要在两者之间暂停执行,那就没问题,但我想要一个有效的响应。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我认为@Holger的答案有点正确。您正在检查函数实际生成之前的返回值。有时会有很长的过程需要时间来产生价值。您应该专注于使功能更快,或者您应该继续检查返回的值。

使用if-else语句检查值。如果未定义,请记录下来。 您可以对用户使用加载轮动画。如果它与用户体验有关。

相关问题