2012-02-07 143 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"); 
    } 
}); 

})。 }