最近很多小伙伴都在问AjaxOptionsOnSuccess回调参数不起作用和ajax回调函数参数这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Ajaxsuccesserrorc
最近很多小伙伴都在问AjaxOptions OnSuccess回调参数不起作用和ajax回调函数参数这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Ajax success error complete 等option配置、ajax 不进入回调函数 success、Ajax.BeginForm返回方法OnSuccess、Ajax.BeginForm返回方法OnSuccess及转义字符等相关知识,下面开始了哦!
本文目录一览:- AjaxOptions OnSuccess回调参数不起作用(ajax回调函数参数)
- Ajax success error complete 等option配置
- ajax 不进入回调函数 success
- Ajax.BeginForm返回方法OnSuccess
- Ajax.BeginForm返回方法OnSuccess及转义字符
AjaxOptions OnSuccess回调参数不起作用(ajax回调函数参数)
这是我的JS功能:
<script type="text/javascript"> function removeRow (itemId) { alert(itemId); } </script>
我在剃刀中的AjaxOptions声明:
New AjaxOptions With {.OnSuccess = "function(){removeRow(" + item.Id.ToString + ");}"}
在客户端,链接显示如下:
<a data-ajax="true" data-ajax-success="function(){removeRow(3);}" href=...
知道我做错了什么吗?
谢谢!
解决方法
New AjaxOptions With {.OnSuccess = String.Format("removeRow({0})",item.Id) }
Ajax success error complete 等option配置
- beforeSend 在发送请求之前调用,并且传入一个XMLHttpRequest作为参数。
- error 在请求出错时调用。传入XMLHttpRequest对象,描述错误类型的字符串以及一个异常对象(如果有的话),
- success 当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。
- complete 当请求完成之后调用这个函数,无论成功或失败。传入XMLHttpRequest对象,以及一个包含成功或错误代码的字符串。
优先级 error 执行完毕之后 才是 complete,就说无论请求遇到异常否都会执行success.
当判断ajax超时,error 和complete函数 中 选择一个 对textStatus做处理即可
$.ajax({ url:'',type:'get',beforeSend:function(jqXHR){ },success:function(data,textStatus,jqXHR){ },error:function(jqXHR,errorThrown) { } complete:function(jqXHR,textStatus){ } })
ajax 不进入回调函数 success
可能问题:
1 跨域
url概念:http://book.51cto.com/art/201102/245173.htm
跨域概念解决参考:http://www.open-open.com/lib/view/open1344558130468.html#_label1
2 返回值类型是否正确
录入你从后台传json类型的数据最好加个注解:@ResponseBody
3 还有最难的一种,碰到者少之又少,我公司的专家都没有解决,任谁遇到都只有认栽的份,看服务器相应的状态码也对,但是就是不走success也不走error,error里XMLHttpRequest也什么信息也没有,最后我用关机重启大法解决。
--------------------------拷贝内容 start ----------------------------------------------------
“ 1.状态码返回200--表明服务器正常响应了客户端的请求;
2.通过firebug和IE的httpWatcher可以看出服务器端返回了正常的数据,并且是符合业务逻辑的数据。
但是,程序就是不进入到回调函数success: function(data){****}而是进入到error: function(data){***}
记得上次是因为存在跨域访问的问题导致。这次查看不存在跨域的问题。此时就很是不解。
事情的来源是这样的: 后台的配置管理模块中有一块是关于国际化的配置,增加国际化描述等等,查询国际化描述。
问题的来源是在输入key='a' 查询前十条数据时发现可以正常的展现数据,但是当我输入key值为z时,并且再查询前20条数据是发现数据不能展现,但是server返回了数据库中的数据。这时第一反应是事不时数据返回的有问题,粗略的检查了返回的数据发现和第一次查询没有什么明显的区别。但是只查询第十四条数据时发现,显示不出来。这时候就开始怀疑了数据问题,进而到数据库中查找第十四条数据没有发现什么特别的地方。
这时开始怀疑,难道是JS程序有处理数据兼容性有问题,觉得甚是不可思议。整了大约半小时,越来越觉得不大可能。就放弃了这种想法。
有转向,重新审视数据。 但是发现数据从中间换行了,没太在意。 在纠结了一会儿后问一同事,指出数据可能多了一个"回车键",在其指点下到数据库表中再次查看该条数据发现有一个字段的值多了一个"回车键"。删除后,一切恢复正常。
思考第一次和第二次碰到的问题,我初步认识到:
1. 返回的数据类型一定要符合定义的数据类型。即如果你定义的 dataType 是 json 类型的,那么返回来的数据一定是 json 才可以,平且不然就会执行 error 里的程序块儿。
(1) 同时需要特别的注意返回的JSON数据是否是严格的JSON格式.
(2) 也应该严重关切当后台返回的是一个List 数据(List当中的数据是Json格式)时,有没脏数据即不是严格的JSON格式。
很隐蔽的可能是数据某一个字段中在开始或末尾含有特殊字符,以"回车键"、"Tab键"等
这类隐蔽错误的规避措施就是好的编程习惯:
a. 对于在页面填写入库的数据最好强制性的做,去空操作<利用客户端最好>。
b. 特殊的业务需注意特殊字符。
这样还不够,因为在开发过程中测试或开发人员自己在数据库中手动添加数据,可能会多加了空格等,导致程序调试,测试带来了麻烦。 这时就需要考虑在后台代码对获取的数据做处理。
2. 原因是ajax请求跨域了,解决方法是在两个文件里都添加一段 js: [/b]document.domain,或者采用Jsonp的方式,如我的前一篇blog中提到的。
还有一点对JQuery 中Ajax的一点其它的认识: 客户端发起请求,得到服务器端的相应是200,<正确拿到服务器响应的数据>没有问题.此时在判断进入success 对应的回调函数还是进入到error对应的回调函数之前,可能会校验一些东西:
1. 返回的每条数据是否是dataType中定义的数据类型。如果有部分数据不是或者哪怕一条数据没有严格的按照dataType定义的类型,程序就会进入到error:function(){****}
2. 请求的域和当前域是否是同一域,如果不是同一域也十分有可能进入error:function(){***} ”
通过看了这段内容后,我再对照我的ajax 看了一遍,发现我少配了一个属性(dataType属性)因为我数据类型返回的是json类型,而我这边没有配dataType:'json',这一属性,所以导致出现了此问题。不过, 困扰我这么久的问题终于解决了,下次得万分小心才是,该配置的东西还是得配置,不能偷懒。
---------------------------end --------------------------------------------------------------------------
参考:http://my.oschina.net/adwangxiao/blog/78509
Ajax.BeginForm返回方法OnSuccess
Ajax.BeginForm返回方法OnSuccess = "refresh"
在后台Controller里return Content("OK");
前台:
function refresh(e) { if (e.toString() == "OK") { alert("评论成功!"); window.location.href = window.location.href; } else { window.location.href = "../../UserInfo/Login?backurl=" + window.location.href; } }
Ajax.BeginForm返回方法OnSuccess及转义字符
在Ajax异步提交之后,执行的回调方法,Controller返回时,"return View(AAA)",前台js函数接收"function XXX(obj)";
转义字符:@Html.Raw(" ");
在视图界面中,@using 和@ model的作用:
@using 是引用名称空间,使得可以在视图界面可以直接使用类名操作。
@model是强类型绑定,使得视图界面可以使用拉姆达表达式可以访问类对象
@Html.DropDownList,在使用下拉框时,name和List<SelectlListItem>两个参数,
在后台绑定的时候要用ViewData["name"],而那个name就是前台的name,
如:Controller中
List<ZZY_ProductMarketingElementModel> elementList = productMarketElementServices.GetZZY_ProductMarketingElementList(DataBaseType.Write,whereList); List<SelectListItem> selectList = new List<SelectListItem>(); for (int i = 0; i < elementList.Count; i++) { SelectListItem sli = new SelectListItem(); sli.Value = elementList[i].Name; sli.Text = elementList[i].Description; selectList.Add(sli); } ViewData["Type"] = selectList;View中
@Html.DropDownList("Type",(ViewData["Type"] as List<SelectListItem>),"请选择类别",new {})
关于AjaxOptions OnSuccess回调参数不起作用和ajax回调函数参数的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Ajax success error complete 等option配置、ajax 不进入回调函数 success、Ajax.BeginForm返回方法OnSuccess、Ajax.BeginForm返回方法OnSuccess及转义字符等相关内容,可以在本站寻找。
本文标签: