Javascript XMLHttpRequest在函数内调用时未接收响应

Javascript XMLHttpRequest在函数内调用时未接收响应,javascript,ajax,rest,xmlhttprequest,async.js,Javascript,Ajax,Rest,Xmlhttprequest,Async.js,我有一个HTML表单,在提交时调用,函数- function getLocationTemp() { temp= new XMLHttpRequest(); temp.open('GET', 'url', true); temp.onload = function () { console.log(temp.response); } temp.send(); } 由于某些原因,我从未收到对此API调用的响应。我已经试着调试readySta

我有一个HTML表单,在提交时调用,函数-

function getLocationTemp() {
    temp= new XMLHttpRequest();
    temp.open('GET', 'url', true);
    temp.onload = function () {
        console.log(temp.response);
    }
    temp.send();
}
由于某些原因,我从未收到对此API调用的响应。我已经试着调试readyState,我总是在-1

尽管如此,当我在函数外部执行相同的代码块时-

temp= new XMLHttpRequest();
temp.open('GET', 'url', true);
temp.onload = function () {
    console.log(temp.response);
    }
temp.send();
function getLocationTemp() {
console.log('random');
}
它可以工作,我得到数据,响应代码为-4

我假设问题是流正在离开函数,因此本地onload超出了范围。因此,尝试在函数中从0到100运行for循环,认为这会给它足够的时间来获得响应,并将其放入while循环,直到readystate变为4才退出。 但州政府不会超过1


问题似乎出在哪里?

如上所述,操作正在重新呈现页面并终止请求。这更像是一个onclick函数处理程序,或者使用表单标记及其属性(如action和method)更改结构来调用它

通过onclick方法执行此操作的示例如下-

function getLocationTemp() {
    temp= new XMLHttpRequest();
    temp.open('GET', 'url', true);
    temp.onload = function () {
        console.log(temp.response);
    }
    temp.send();
}
在html中,类似这样的内容-

<button  type="button" onclick="getLocationTemp()">Submit Form</button>

您应该使用onreadystatechange而不是unload,或者使用涉及使用承诺的fetchapi;FetchAPI和Promises都可以在任何现代浏览器中使用,但Internet Explorer的所有版本除外。我从两个方面都收到了一个很长的HTML片段。您可以共享一个codepen或JSFiddle链接吗?在调用中添加一个错误处理程序,看看是否收到错误消息。什么叫getLocationTemp?这是一个按钮点击?提交表格?链接点击?我猜您没有取消操作,页面正在重新绘制并终止您的HTTP请求。流没有进入onerror。“不取消请求”是什么意思?既然请求是在onSubmit之后创建的,为什么页面会重新绘制?谢谢!onClick工作得很好!我唯一的问题是-如果请求只是在onSubmit上创建的,那么由于表单提交后页面从未重新呈现,它将如何被杀死?