2013-12-07 59 views
1

如果我在我的文本元素周圍添加一個表單並進行AJAX調用,頁面將被重新加載。如果我從我的文本元素周圍移除表單並進行AJAX調用,則頁面不會重新加載。由於各種原因,我需要表單(至少包裝隱藏的元素)。頁面在包裝表單並進行AJAX調用時重新加載頁面

代碼

<div id="mainContent" style="width:500px;position:relative;display:block;margin:0 auto;"> 
    <p> 
    <form id="myForm" name="myForm"> 
     <input type="hidden" name="nonce" id="nonce"/> 
     <input type="hidden" name="title" id="title"/> 
     <input type="hidden" name="content" id="content"/> 
     <button onclick="getData('/blog/?json=info')">Get JSON API Info</button> 
     <button onclick="getData('/blog/?json=get_recent_posts')">Get Recent Posts</button> 
     <button onclick="createPost()">Create Post</button> 
     <button onclick="updatePost()">Update Post</button> 
     <br><textarea id="responseTextArea" type="text" name="message" style="width: 100%;height:300px"></textarea><br><br> 
    </form> 
    </p> 
</div> 

function getData(query) { 
    var request = getRequest(); 
    document.getElementById("responseTextArea").value = "Sending request..."; 

    request.onreadystatechange = function() { 
     if (request.readyState==4 && request.status==200) { 
      document.getElementById("responseTextArea").value = request.responseText; 
     } 
    } 

    request.open("GET", query, true); 
    request.send(); 
} 

// utility method for getting asynchronous request 
function getRequest() { 
    var request; 

    if (window.XMLHttpRequest) { 
     request = new XMLHttpRequest(); 
    } 
    else { 
     request = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    return request; 
} 

PS我使用JQuery是。在Firefox 25 Mac上測試。

UPDATE:
如果我不換任何重裝的按鈕!所以現在我有一個解決方法,但是這裏發生了什麼?如果我需要按鈕,我該怎麼辦?更改後的代碼:

<p> 
     <form id="myForm" name="myForm"> 
      <input type="hidden" name="nonce" id="nonce"/> 
      <input type="hidden" name="title" id="title"/> 
      <input type="hidden" name="content" id="content"/> 
     </form> 

     <button onclick="getData('/blog/?json=info')">Get JSON API Info</button> 
     <button onclick="getData('/blog/?json=get_recent_posts')">Get Recent Posts</button> 
     <button onclick="createPost()">Create Post</button> 
     <button onclick="updatePost()">Update Post</button> 
     <br><textarea id="responseTextArea" type="text" name="message" style="width: 100%;height:300px"></textarea><br><br> 
    </p> 
+2

很簡單...如果你不阻止默認處理按鈕點擊事件的形式...表單將提交(導致重新加載),因爲它應該,無論你發送一個Ajax。嘗試'onclick'嘗試'返回false;'雖然最好添加不引人注目的事件監聽器,然後你可以使用'event.preventDefault()' – charlietfl

+0

感謝您的解釋。 –

回答

2

type="button"添加到您的每個按鈕字段,這將阻止他們提交表單。

+0

不錯,我還是新來堆棧溢出,並沒有意識到你可以做內聯代碼阻塞。 '謝謝!' – dsharris

1

正如查理所說,這是默認的表單行爲,如果您不阻止默認行爲,它會觸發頁面刷新。在jQuery中,您可以找到提交事件並在其中執行諸如e.preventDefault()之類的操作。