我有一个html登陆页面、一个js文件、一个ashx一般处理程序文件。
正在做使用JQuery Ajax异步提交登陆,现在遇到一个问题就是Firefox浏览器总是把Response.Write("")的返回值打印到浏览器上,不知道为什么?该怎么解决呢?
下面是代码,请各位高手给看看,帮小弟解决下.
HTML页面:
1 <form method="post" action="LoginHandler.ashx" id="form" name="form">
2 <div id="divLogin">
3 <div class="divUserName">
4 <input name="USERNAME" id="USERNAME" type="text" style="width: 230px; height: 28px; font-size: x-large;"
5 onmouseover="this.focus()" onfocus="this.select()" value=""/>
6 </div>
7 <div class="divPassWord">
8 <input name="PASSWORD" id="PASSWORD" type="password" style="width: 230px; height: 28px; font-size: x-large;"
9 onmouseover="this.focus()" onfocus="this.select()" value=""/>
10 </div>
11 <div class="divLoginButton">
12 <input type="image" id="imglogin" src="Images/krsoftlogin.gif"/>
13 </div>
14 <div class="divCancelButton">
15 <input type="image" src="Images/krsoftcancel.gif" onclick="LoginClear();return false;"/>
16 </div>
17 </div>
18 <div id="divleftLogo">
19 </div>
20 <input type="hidden" id="HideHashVal" value="sss"/>
21 <input type="hidden" id="HideIAID"/>
22 </form>
Js代码:
$(document).ready(function() {
$("#imglogin").click(function(){
login();
//return false;
});
});
function login() {
var user = $("#USERNAME").val();
var pass = $("#PASSWORD").val();
if (user == "") {
alert('请输入用户名');
$("#USERNAME").focus();
return false;
}
if (pass == "") {
alert('请输入密码');
$("#PASSWORD").focus();
return false;
}
$.ajax({
type: "POST",
url: "LoginHandler.ashx",
data: "USERNAME=" + user + "&PASSWORD=" + pass,
beforeSend: function() { },
success: function(msg) {
if (msg == "2") {
if(CheckBrowser()=="Firefox"||CheckBrowser()=="Chrome")
{
$("document").load("Index.aspx");
}
else
{
window.location.href="Index.aspx";
}
}
else if (msg == "1") {
alert('用户名不正确');
}
else if (msg == "3") {
alert('密码不正确');
}
else {
alert('登录失败');
}
}
});
}
ashx代码:
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Write("1");
}
imglogin控件的点击事件触发了form表单的submit事件,把form表单去掉或者加onsubmit="return false"
不行啊!加上onsubmit="return false"就不提交了
@Dayiba狼: 在哪里加的?
@az235: 在form上啊
@az235: <form method="post" action="LoginHandler.ashx" _disibledevent="return false" name="form">
@Dayiba狼: 这是onsubmit吗?
你可以把form标签中的method="post" action="LoginHandler.ashx" 给去掉,不然就相当于执行了两次调用了。。。
不行啊。IE和Firfox对异步请求的处理有什么区别吗?
没什么区别,你看一下这个例子:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="../JS/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#btn").click(function() {
$.ajax({
url: "LoginHandler.ashx", type: "POST",
success: function(responseText) {
$("span").html("返回正常" + responseText);
}
});
});
});
</script>
</head>
<body>
<form action="">
<span></span>
<div>
<input type="button" value="请求" />
</div>
</form>
</body>
</html>
没什么问题,你可以先把其它的代码屏蔽掉,只查看ajax请求的代码,试试看。。。
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="../JS/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#imglogin").click(function() {
login();
});
});
function login() {
var user = $("#USERNAME").val();
var pass = $("#PASSWORD").val();
if (user == "") {
alert('请输入用户名');
$("#USERNAME").focus();
return false;
}
if (pass == "") {
alert('请输入密码');
$("#PASSWORD").focus();
return false;
}
$.ajax({
type: "POST",
url: "LoginHandler.ashx",
data: "USERNAME=" + user + "&PASSWORD=" + pass,
beforeSend: function() { },
success: function(msg) {
if (msg == "2") {
if (CheckBrowser() == "Firefox" || CheckBrowser() == "Chrome") {
$("document").load("Index.aspx");
}
else {
window.location.href = "Index.aspx";
}
}
else if (msg == "1") {
alert('用户名不正确');
return false;
}
else if (msg == "3") {
alert('密码不正确');
return false;
}
else {
alert('登录失败');
return false;
}
}
});
}
</script>
</head>
<body>
<form id="form" name="form" action="">
<div id="divLogin">
<div>
<input id="USERNAME" type="text" _disibledevent="this.focus()" _disibledevent="this.select()" />
</div>
<div>
<input id="PASSWORD" type="password" _disibledevent="this.focus()" _disibledevent="this.select()" />
</div>
<div>
<input type="button" id="imglogin" value="请求" />
</div>
</div>
</form>
</body>
</html>
这是你原来的代码,也没什么问题啊,执行通过啊。。。再不然就是你浏览器的问题了。。。
Pleade add this:Respone.End();
ashx中,去掉 context.Response.ContentType = "text/plain";