首页 新闻 搜索 专区 学院

ASP.NET MVC 页面重复刷新

0
[已关闭问题] 关闭于 2016-12-02 14:14

在一个简单的MVC页面中放一个input,给他一个onfocus事件,这个事件执行一个方法,方法里面用$.ajax(),我的原意是当这个文本框获得焦点的时候就去执行后台方法,但是现在问题的是这个方法会不停的执行,废话少说,直接上代码吧!

前段代码:

<div>
<input id="com" type="text" onfocus="maileComplete();" />
</div>

function maileComplete() {
$.ajax({
data: "",
contentType: "application/json",
url: "@Url.Action("GetCitity","Test")",
type: "post",
dataType: "json",
success: function (msg) {
alert(msg);
}
});
}

后端代码就是返回一个Json字符串

public JsonResult GetCitity()
{
StringBuilder sb = new StringBuilder();
sb.Append("[");
sb.Append("\"苹果4代iphone正品\",");
sb.Append("\"苹果4代 手机套\",");
sb.Append("\"苹果4\",");
sb.Append("\"戴尔笔记本\",");
sb.Append("\"戴尔手机\",");
sb.Append("\"戴尔键盘\"");
sb.Append("]");
return Json(sb.ToString(), JsonRequestBehavior.DenyGet);
}

现在的结果是当文本框获得焦点之后不停的执行后台方法,不停的弹出对话框!!这是为什么呢?哪位大神出来指点一二??

gyangjing的主页 gyangjing | 初学一级 | 园豆:7
提问于:2016-07-06 17:24
< >
分享
所有回答(2)
0

java测试

 

后台代码

public void test(){
System.out.println("进入");
renderJson("{\"userName\":\"jzlg2012\",\"password\":\"123456\"}");
}

 

html代码(复制的你的)

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试</title>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<div>
<input id="com" type="text" onfocus="maileComplete();" />
</div>
<script type="text/javascript">
function maileComplete() {
//alert("执行了");
$.ajax({
data: "",
contentType: "application/json",
url: "/test",
type: "post",
dataType: "json",
success: function (msg) {
alert(JSON.stringify(msg));

}
});
}
</script>
</body>
</html>

 

 

结果:

没有问题,在获取焦点的时候执行了方法返回到前台,没不停弹框

加洲旅馆2012 | 园豆:503 (小虾三级) | 2016-07-06 18:00

我用的是ASP.NET MVC 做的,一直出现了这个问题,如果用WebForm页面来做这个就不会出现这样的问题,不知道为啥MVC页面会是这样的??

支持(0) 反对(0) gyangjing | 园豆:7 (初学一级) | 2016-07-06 21:13
0

input獲得焦點->alert跳出(input失去焦點)->按下alert的確定(input獲得焦點)

這是個死循環,當然無限alert..

不知道你要做什麼,但看起來這只是個demo

alert(msg)改成console.log(msg)再測吧

RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 09:01

这里的alert当然可以换做其他,但是问题的关键不在于此,问题的关键在于它不停的去执行后台方法,把alert注释掉,在后台方法里去下断点,程序也是一直在执行后台的方法!还有,为什么你会认为这里用了alert就是死循环呢??

支持(0) 反对(0) gyangjing | 园豆:7 (初学一级) | 2016-07-07 09:17

@gyangjing: 

結論是我寫了demo測出來的

我只能告訴你正解,能不能理解就是你自己的問題了

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 09:22

@RosonJ: 你说的我当然能理解了,但是我把alert去掉,依然会不停的去执行后台方法,这才是关键,不知大神有何解?

支持(0) 反对(0) gyangjing | 园豆:7 (初学一级) | 2016-07-07 09:25

@gyangjing: 

https://github.com/peterjan1989/AJAXIssueDemo

fork下來執行看看,沒有你說的問題

好了說一聲我刪掉

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 09:35

@RosonJ: 代码我下下来了,你我代码的不同在于你的模板页里面引用了一些Js和css,比如关于bootsharp的东西,而我的代码里面啥都没有引用,是不是因为引用了这些的JS的缘故?我再看看吧,谢谢你了!

支持(0) 反对(0) gyangjing | 园豆:7 (初学一级) | 2016-07-07 09:47

@gyangjing: 

jQuery你應該也引用了,jquery.validate, bootstrap等的不應該會造成影響,著重於focus事件的觸發去研究吧

實做過程中發現,來回切換頁籤也會重複觸發focus事件,但應該不是你的案例

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 09:52

@RosonJ: 代码里面只是引用了最基本的JS,其他的就没有了,但是也没为什么会不停的执行onfocus事件,这个以前还真没遇到过

支持(0) 反对(0) gyangjing | 园豆:7 (初学一级) | 2016-07-07 09:57

@gyangjing: 

看不到你的代碼也幫不上忙,我也挺好奇的..

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 10:00

@RosonJ:如果你实在好奇,你可以新建一个空的mvc程序,当前页面就引用一个基本的js,其他别的脚本啊样式啥的都不用,就把我的前端和后端的代码复制过去,你再看看效果。。。

支持(0) 反对(0) gyangjing | 园豆:7 (初学一级) | 2016-07-07 10:23

@gyangjing: 

你用的什麼瀏覽器,不確定有沒有影響,了解一下

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 10:44

@gyangjing: 

試了,同樣沒出現的問題

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 10:50

@RosonJ: 谷歌,IE,火狐我都试过,都有这样的问题。。。。对了,我用的vs是2010,mvc 3,难道跟这个有关系?之前也没发现onfocus事件有这问题的。。。

支持(0) 反对(0) gyangjing | 园豆:7 (初学一级) | 2016-07-07 10:56

@gyangjing: 

focus是前端事件,不受後端版本影響,瀏覽器可能還大些

做個測試,你把AJAX拿掉,maileComplete()裡只寫一行console.log('...');

這樣還會重複觸發嗎

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 11:00

@RosonJ: 如果把ajax去掉,光执行前端的console.log的话,每次文本框获得焦点只会执行一次,但是加上ajax之后,就会不停的去执行后端方法了。。。

支持(0) 反对(0) gyangjing | 园豆:7 (初学一级) | 2016-07-07 11:13

@gyangjing: 

我..真的無解了,無法重現你的問題,實在無從查起..

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2016-07-07 11:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册