Javascript Chrome扩展:为什么我的响应在AJAX调用之前返回?
我正在从我的Javascript Chrome扩展:为什么我的响应在AJAX调用之前返回?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在从我的popup.html中调用AJAX,就像这样 chrome.extension.sendRequest( { req: "send", url: requrl }, function(response) {
popup.html
中调用AJAX,就像这样
chrome.extension.sendRequest(
{
req: "send",
url: requrl
},
function(response)
{
console.log("RESPONSE:" + response.reply);
});
此代码在background.html中转到以下情况
case "send":
sendResponse({
reply: send(request.url)
});
break;
这反过来又称之为
function send(uri)
{
var xhr = new XMLHttpRequest();
xhr.open("POST",uri,true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
xhr.onreadystatechange = function (send){
if(xhr.readyState == 4){
return xhr.responseText;
}
}
xhr.send(null);
}
我的问题是,在
send()
有机会响应之前,我的代码正在返回undefined
。如何使代码等待响应?我需要保持此调用异步,因为我需要UI不冻结以显示进度对话框。返回未定义的的原因是这是发送功能的结果。如果您查看当前函数,它将在send(null)
之后退出。return语句要过一段时间才会执行,届时将没有任何内容可以接收它
如果希望在XHR请求完成时响应,则需要使用回调
简言之:
case "send:"
send(request.url, function(response) {
sendResponse(response);
})
function send(uri, callback) {
...
xhr.onreadystatechange = function (send){
if(xhr.readyState == 4){
callback(xhr.responseText);
}
}
...
}
c、 f