jq live的ajax函数调用

来源:互联网 发布:腾讯java工程师面试题 编辑:程序博客网 时间:2024/03/29 22:19

今天碰到一个很诡异的问题,在调用ajax函数处理的时候:


<a href="javascirp:void(0);  class="ok" />确定 </a>


$('td .ok').live('click',function(){
    var order_id=$(this).parent().attr('data-id');
var xt=$(this).siblings('input[name=total]').val();
if(isNaN(parseFloat(xt))) { 
   alert("请输入正确的金额!");
$(this).siblings('input[name=total]').val(total)
return false;
}
    
$.ajax({
   url:'index.php?route=merchants/order_create/setOrderTotal',
data:{order_id:order_id,total:xt},
//data:'order_id='+order_id+'&total='+xt,
type:'post',
        dataType: "json",
error: function(jqXHR, exception) {
            if (jqXHR.status === 0) {
                alert('Not connect.\n Verify Network.');
            } else if (jqXHR.status == 404) {
                alert('Requested page not found. [404]');
            } else if (jqXHR.status == 500) {
                alert('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                alert('Requested JSON parse failed.');
            } else if (exception === 'timeout') {
                alert('Time out error.');
            } else if (exception === 'abort') {
                alert('Ajax request aborted.');
            } else {
                alert('Uncaught Error.\n' + jqXHR.responseText);
            }
        },
success: function(data, textStatus, jqXHR) {
  //console.log(textStatus);
    if(data.odt==1){
    alert('修改成功!');
}else{
    alert('修改失败!');
}
}
});


});


这样会跳到error函数里面,总是返回 jqXHR.status ===0,头都大了,不知道问题出现在哪里,

查找了N多,总结有两条原因:

1:跨域请求了数据,也就是发送的Url不对,

2:在提交之前浏览器重新刷新了页面

感觉这两点都不是 这个 问题出现的 原因,

也有的是说form表单应该放在table里面才有效,否则要写  $('aa').('submit','ddd';return false;)之类的。


最后看到 是 a href="javascript:void(0)"出现的问题,这么一来 调用 xhr.open 时 自然是出现 无效url,去掉javascript:void(0)即可。

这也可能就是a标签 在点击 调用ajax时 应该特别要注意的问题。

附注:

$("staticparentNode .child").live("click",function(){console.log("i am available no matter now and future")});和$("staticparentNode").on("click",".child",function(){console.log("so did I")});这两个作用是相同的,.live()只接受两个参数,而.on()可以接受四个参数,除了事件名和回调函数是必须之外,还可以接受一个选择器和一个数据对象

live已在1.9版本删除

以下事件触发td .ok

$('input[name=total]').live('keypress',function(e){
    var keyunicode=e.charCode || e.keyCode;
if(keyunicode===13){
$(this).siblings('.ok').click(); // trigger the dynamically created 'anchor' stuff
}
});