【问题标题】:AJAX request doesn't work the first time but works thereafterAJAX 请求第一次不起作用,但之后起作用
【发布时间】:2016-06-21 19:39:34
【问题描述】:

我正在制作一个简单的函数,如 w3schools 官方网站所示。我正在尝试运行 AJAX 请求的功能。

我想这一切都运行良好,除了代码仅在第一次失败后运行。我的意思是,假设您第一次来到我的网站,并且您第一次尝试提交,它只是刷新了页面,没有任何反应。

据我所知,我尝试在每一行中使用alert 函数进行调试,以查找请求是否真的在发出。我发现readyState 在代码第一次运行时会从 1 跳到 4(在每个浏览器、不同的计算机上),但下一次它将呈现 readyState 1、2、3 和 4 并且 BANG 它将工作并提交。

Javascript函数代码(head标签内)

function sendForm() {
        
    var criarRequest = new XMLHttpRequest();
    criarRequest.onreadystatechange = function() {  
        if (criarRequest.readyState == 4 && criarRequest.status == 200) {
            document.getElementById("contacts").innerHTML = criarRequest.responseText;
        } 
    };
    //var loading  = document.getElementById("contacts").innerHTML = "A enviar...";
    var inputEmail = document.getElementById("email").value;
    var inputMensagem = document.getElementById("mensagem").value;  
    criarRequest.open("POST", "sendEmail.php", true);
    criarRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    criarRequest.send("email="+inputEmail+"&mensagem="+inputEmail);
}

HTML 代码表单/输入

<form>
    <input style="width:220px; height:39px" type="text" id="email" placeholder="Email" /> 
    <br  /> <br  />
    <textarea style="width:220px; height:100px" id="mensagem" placeholder="Mensagem"></textarea>
    <br  /> <br  />
    <button id="enviar" onclick="sendForm()">Enviar</button>
</form>

【问题讨论】:

    标签: javascript ajax xmlhttprequest readystate


    【解决方案1】:

    实际上非常简单:P 您的按钮是“提交”的默认属性“类型”,当这种情况发生时,表单被提交导致刷新。添加 'type="button"' 以更改此功能,您不应再刷新允许 ajax 完成其请求。

    【讨论】:

    • 非常感谢!如此简单,它现在正在工作。我不敢相信我已经浪费了这么多时间来审查我的 js 代码。
    • 你知道为什么它会在第一次“失败”提交后起作用吗?
    • 不完全确定原因,但每次都应该刷新。我可以看到它工作的唯一原因是您的服务器缓存了结果并且看到了相同的请求,因此它具有更快的响应,但它仍然令人耳目一新。第一次点击后你的页面是否还在刷新?
    • 按照你说的操作,问题就解决了,将类型设置为“按钮”。它一直在工作:)
    • 你刚刚救了我的命!谢谢* 100
    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2014-08-12
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多