2014-07-22 268 views
1

您好,我有這樣的代碼發送Ajax請求

<button onclick="sbt()" name="step1[save]" type="submit" class="btn-type5 next-btn-form pie" value="Далее">Send</button> 
function sbt(){ 
var phone = document.getElementById('fld1').value; 
     var xmlhttp; 
     if (window.XMLHttpRequest) 
     { 
       xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     { 
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     }} 
     xmlhttp.open("GET","host.com/send.php?phone="+phone+"&t="+Date.now(),true); 
     xmlhttp.send(); 
} 

我想給這個請求的異步,但是當我使用xmlhttp.open(...,...,true)申請好好嘗試一下,即使去到服務器,我看它在谷歌瀏覽器的控制檯,而是如果我運行sbt()功能從控制檯請求確定,如果我使用xmlhttp.open(...,...,false)它工作正常,有人可以幫助我嗎?謝謝。

+0

你讀過「如何從返回一個Ajax調用的響應」的問題? –

+0

我不需要回復我只需要發送請求。 –

+1

您確實在'host.com'之前缺少一個報價,或者是複製/粘貼錯誤? –

回答

2

提交按鈕將立即提交它所在的表單,並且瀏覽器將離開頁面(以及正在進行Ajax請求的JavaScript執行環境)。

取消表單提交的默認行爲,當你想使用JavaScript代替。

onclick="sbt(); return false;" 

(我想看看使用的modern approach to event binding代替onclick屬性雖然)。

+0

hm請求轉到服務器,但它應該在按鈕單擊後進入另一個頁面,但它保持在同一頁面 –

+1

使用Ajax的要點是保持在同一頁面上。如果您想要轉到其他網頁,請使用提交表單的URL來處理所有功能,而不是在多個HTTP請求之間進行拆分。 – Quentin

1

這是你的整個頁面的代碼?

你檢查了jscript的加載順序嗎?

請看一看這個--->fiddle(這有一個3秒的響應延遲)

<h2>AJAX async demo</h2> 

<button type="button" onclick="callAjax()">Request data</button> 
<div id="testDiv"></div> 

<script> 
function callAjax() { 

    var xmlhttp; 
    if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 

     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById("testDiv").innerHTML = xmlhttp.responseText; 
     } 
    }; 

    xmlhttp.open("POST", "/echo/html/", true); 
    var params = "html=test&delay=3" 
    xmlhttp.send(params); 
} 
</script>