jQuery ajax函数遇到的问题
我在dom中添加了onclicl="post()"
<scriopt>
function post()
{
dosomething....
$.ajax({
type:'post',
timeout:0,
url:"/admin/push/app",
data:{'class':$class, 'data':$data},
success:function(data) {
console.log('121');
data = data.replace(/[\r\n\s]/g, '');
$('#unok').attr('disabled', false);
$('#unok').attr('id', 'ok');
if (data === '0') {
alert('输入的内容有误');
return fale;
} else {
alert('操作成功');
return;
window.location.href="/admin/push/device";
}
}, error:function(){
$('#unok').attr('disabled', false);
$('#unok').attr('id', 'ok');
console.log('123');
});
}
</script>
不用去管我操作了什么dom, 也不用去管我发起了什么请求, 这个请求在chrome FF里面根本没有去发起,
而且console报告了一个这样的错误Maximum call stack size exceeded
那么问题在哪里呢?
搜索了很多资料也没有找到。在看一篇资料的时候发现了这么一句话
getScript方法介绍
Load a JavaScript file from the server using a GET HTTP request, then execute it.
——官方如是说
有两个特征,一是能够使用get的http请求服务器资源下载到本地,二是能够在加载完毕之后并执行这个脚本。它的深层次的写法是这样的:
$.ajax({
url: url,
dataType: "script",
success: success
});
刚好好我在页面中设置了ajaxsetup函数,在beforeSend对象的闭包中我使用了$.getScript函数。
那么 是不是这个问题呢?
经过我多次验证的确是这个问题(PS:并不懂原理)。
下面附上我的测试代码:
1 <script type="text/javascript" src="/static/admin/js/jquery-1.9.1.min.js"></script> 2 <script type="text/javascript"> 3 (function(){ 4 $.ajaxSetup({ 5 timeout: 3000, 6 //完成请求后触发。即在success或error触发后触发 7 complete: function (xhr, status) { 8 // console.log(xhr); 9 // console.log(status); 10 if ([200].lastIndexOf(xhr.status) >= 0){ 11 // console.log(xhr.status); 12 // console.error('页面出现了问题, 请联系管理员'); 13 //先检查是否有layer对象 14 if (typeof (layer) == 'undefined') { 15 //加载js对象和css文件 16 $.getScript('/plug-in/layer/layer.js', function(){ 17 // addCSS('/plug-in/layer/skin/layer.css'); 18 layer.msg('页面出现了问题, 请联系管理员!', {icon:2}); 19 }); 20 } else { 21 layer.msg('页面出现了问题, 请联系管理员!', {icon:2}); 22 } 23 return false; 24 } 25 if (xhr.responseText.indexOf('<script>') >-1) { 26 document.write(xhr.responseText); 27 } 28 }, 29 beforeSend: function (xhr) { 30 31 //先检查是否有layer对象 32 if (typeof (layer) == 'undefined') { 33 // 加载js对象和css文件 34 $.getScript('/plug-in/layer/layer.js', function(){ 35 // addCSS('/plug-in/layer/skin/layer.css'); 36 layer.load(2, { 37 shade: [0.1,'#fff'], 38 time:10*1000 //0.1透明度的白色背景 39 }); 40 }); 41 } else { 42 layer.load(2, { 43 shade: [0.1,'#fff'], 44 time:10*1000 //0.1透明度的白色背景 45 }); 46 } 47 } 48 49 }); 50 })(); 51 52 function ajax() 53 { 54 $.ajax({ 55 type:'get', 56 url:'/', 57 success:function(data) { 58 console.log(data); 59 }, error:function() { 60 console.log('error'); 61 } 62 }); 63 } 64 function ajax1() 65 { 66 $.ajax({ 67 type:'get', 68 url:'/', 69 success:function(data) { 70 console.log(data); 71 ajax(); 72 }, error:function() { 73 console.log('error'); 74 } 75 }); 76 } 77 </script> 78 <script type="text/javascript"> 79 80 </script> 81 <button onclick="ajax()">OK</button> 82 <button onclick="ajax1()">OK1</button>
下面处理几个假设:
如果我能读懂jquery源代码,那么这次的问题是不是就不会困扰我半天时间了?
如果我能仔细的看ajaxsetup函数的对象的处理方式的话,那么是不是这问题就很快解决了?
解决方案:
读下jquery源代码。
浙公网安备 33010602011771号