第一个事件监听器工作正常。当第二个事件监听器运行时,我可以看到Firebug中的POST和返回,但alert('test')
永远不会发生。
$('.walkthrough').click(function(){
var url = $(this).data('story');
var num = $(this).data('revert');
$('#tableauViz').replaceWith('<div id="tableauViz"></div>')
$.post('',{method: 'getTicket', url: url},function(data){
switchToStory(url,data);
$('#help').html('<p>You are currently viewing the walkthrough, click here to <a href="#" data-num="'+num+'" class="exitWalkthrough">go back</a>.</p>');
});
});
$('#addViz').click(function(){
var url = $('#Viz-URL').val();
var name = $('#Viz-Name').val();
var expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
var regex = new RegExp(expression);
if(url.match(regex) && name != ''){
url = url.replace('http://','').replace('https://','');
console.log(url);
$.post('',{
user_key:'5',
method: 'addViz',
url:url,
name:name
},function(data){
alert('test');
},'json');
} else {
alert("Please enter a valid URL and Name");
}
});
有没有人在那里看到任何会阻止这种情况的东西?我该如何进一步调试此问题?
答案 0 :(得分:0)
执行ajax请求时,即使你不认为它会被调用,提供错误回调总是一个好主意。没有一个,你就无法诊断出与网络无关的问题。
所有jQuery ajax方法(除.load之外)都返回一个jQuery promise对象,该对象具有done,fail和always方法。使用fail方法来捕获任何故障。
$.post(url, data, successHandler).fail(function (xhr, status, reason) {
console.log(
xhr, // this is an object, it will contain the response text, headers, etc
status, // the http status of the response, 20x or 30x for success
reason // this is the reason that the response failed
);
});
在你的情况下,它失败了,因为空字符串无效json。
答案 1 :(得分:-2)
您需要从.post中删除第一个空arg'',否则将使用空字符串覆盖该URL。
$.post({
user_key:'5',
method: 'addViz',
url:url,
name:name
},function(data){
alert('test');
},'json');