2012-02-07 212 views
0

這是我的HTML。只是一個簡單的形式:jquery ajax似乎不工作

<form> 
    Username: 
    <input type="text" id="username"/> 
    <br/> 
    Password: 
    <input type="password" id="password"/> 
    <br/> 
    <input type="submit" id="submit" value="submit"/> 
</form> 

下面是與之相關的我的JS:

function init(){ 
$("#submit").click(function() { 
    var url = "http:example.com/mail"; 
    alert("what?"); 
    $.ajax(url, { 
     type : 'post', 
     data : { 
      'username' : $("#username").val(), 
      'password' : $("#password").val() 
     }, 
     success : function() { 
      alert("done"); 
     } 
    }); 
}); 
} 

我點擊提交按鈕後,$.ajax功能應該做一篇文章到的網址,讓我保持我的服務器運行。

但是,從我的服務器端日誌或螢火蟲網絡監控,我沒有看到POST方法的任何跡象。 (第一alert被觸發,但第二次是沒有。)

他們是我開發了兩個不同的應用程序,所以我做了一些研究之後,這裏是一個解釋:

由於$.ajax()使用XMLHttpRequest,它受XHR的跨域限制。您的SiteA和SiteB位於不同的主機/端口上嗎?如果是這樣,你會看到預期的行爲。

是這樣嗎?如果是這樣,是否有任何解決方法?

+0

有沒有什麼理由說你在用Ajax做這件事?正常表單提交工作嗎?如果是這樣,你就不必擔心跨域限制。 – Douglas 2012-02-07 01:14:20

+1

http://api.jquery.com/submit/ - 我會建議綁定你的函數到表單的提交,而不是按鈕的點擊;這樣,您可以在輸入密碼後按回車鍵。 – whichdan 2012-02-07 01:14:23

+0

小心張貼密碼在明文.. – Lloyd 2012-02-07 01:43:26

回答

2

您需要return false;在點擊處理程序的末尾以防止默認提交表單。雖然一旦您阻止提交表單,您仍然會遇到跨域限制,這並不是一件容易解決的問題。查看jsonp尋找可能的解決方案。

+0

Thanx,現在我記得我有過類似的情況。所以這是限制不是嗎? ** Origin chrome-extension:// dblkghnlgboodeflkimkclllhcgikcam不被Access-Control-Allow-Origin所允許** – 2012-02-07 01:17:18

1

事件處理程序改成這樣......

function init(){ 
$("#submit").click(function(event) { 
    event.preventDefault(); 

    var url = "http:example.com/mail"; 
    alert("what?"); 
    $.ajax(url, { 
     type : 'post', 
     data : { 
      'username' : $("#username").val(), 
      'password' : $("#password").val() 
     }, 
     success : function() { 
      alert("done"); 
     } 
    }); 
}); 
} 

這將從實際做一個完整的POST到服務器停止形式。

+0

我做過了,但仍有一個限制,阻止我發佈它。 Thankx無論如何 – 2012-02-07 01:20:01

+0

Gotcha ...那個dern跨瀏覽器的東西:) – jcreamer898 2012-02-07 01:20:37

0

我認爲這會工作

function init(){ 

$( 「#提交」)點擊(函數(事件){
event.preventDefault();

var url = "http:example.com/mail"; 
alert("what?"); 
$.ajax(url, { 
    type : 'post', 
    data : { 
     'username' : $("#username").val(), 
     'password' : $("#password").val() 
    }, 
    cache: 'false', 
    async: 'false', 
    success : function() { 
     alert("done"); 
    } 
}); 

})。 }