AJAX调用完成后代码未运行

时间:2014-10-09 18:10:33

标签: javascript jquery ajax

第一个事件监听器工作正常。当第二个事件监听器运行时,我可以看到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");
    }
});

有没有人在那里看到任何会阻止这种情况的东西?我该如何进一步调试此问题?

2 个答案:

答案 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');