前一段时间接触了JQuery Ajax中的.post()方法和.get()方法,感觉到ajax的简洁和强大,当用到.post()方法时,去W3上查找相关的使用方法,感觉十分简单,用法很明了,然后,直接根据自己的需要(js将数据post给php写入数据库,然后返回给js一个值)开写了,写完了,运行,竟然不行!然后仔细地对比我的代码和demo的不同,为了查找错误,将我的代码写的几乎和demo相同了,但是还是无法在js中获得php的数据。
这里先回忆一下.post()方法。
jQuery.post(url,data,success(data, textStatus, jqXHR),dataType)
参数 | 描述 |
url | 将请求发送到的url |
data | 发送的数据(可选) |
success(data, textStatus, jqXHR) | 执行成功后的回调函数,参数均可选,data是返回的数据, textStatus是函数的状态,也可以加入jqXHR得到函数 的返回状态 |
dataType | 预期的服务器相应的数据类型 |
经过仔细的对比,发现js的代码已经不能再改了,然后我开始看php的代码,发现,跟网上唯一不同的是,我增加了一个插入数据库的操作,难道是这个的原因?我把连接数据库、插入数据库的操作通通注释掉了以后,成功了~~~(必然啊,跟网上的demo不能再一样了)。
这是为什么呢,然后开始在网上查资料,突然看到了post()函数的时间问题,大体意思是,当我url连接到插入数据库的php界面时,需要一定的执行时间插入数据库,当我的click函数执行了,刷新了之后,回调函数还没有机会执行post就完成了,所以无论我怎么刷新都没变化。
$.ajax({url:c_url, timeout:3000, success: function(data){alert("aaa");} });
加入超时限制,测试之后,发现function也是能执行的,很明显是超时的问题。插入数据库拖慢了post执行成功回调的时间,于是,我将连接数据库和插入数据库单独加入一个新建的php页面,然后,可以得到数据了。
这是我最后的js代码:
1 $(document).ready(function(){ 2 $("a").click(function(){ 3 var c_url = 'http://localhost/test/check.php'; 4 var jj; 5 $.post("db.php",{id:"5"}); 6 $.post("check.php",{},function(data){jj=data;$("#tname").html(data);}).success(function() { alert("second success"); }) 7 .error(function(a) { alert("error"+a.ResponseText);alert(json_last_error ()); }) 8 .complete(function() { alert("complete"); }); 9 $("#tname").html(data); 10 }); 11 12 });
其中,check.php只有单独定义的一个数组返回用于测试是否收到。
至此,算是结束了,不过这样执行,html方法改变了标签内容,但是在页面上显示一下就突然刷新没了,还没有解决。希望各位大神指点~
第一次接触ajax就碰上了这样的问题,以后还是要系统地学一下。