今天碰到一个很诡异的问题,在调用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
}
});