加载后未触发Javascript代码

时间:2012-12-23 17:34:31

标签: javascript jquery post

我正在尝试开发一个互动网站,但我仍然遇到了应该添加和执行文件的问题。所以我在首页中有以下代码:

$(document).ready(function(){

$('.info').live("click",function()
        {
            if ($('#country span.selected').text().length == 0)
                alert("A company should be selected before continue!");
            else {
                $('.centered').hide();
                $('.waitimg').show();
                $.post('get_data.php',
                {
                    type :$(this).attr("id"),
                    company : $('#country span.selected').text(),
                    company_id : $('#country').attr("value"),
                    country :  $('#scountry span.selected').text(), 
                    industry: $('#industry span.selected').text()
                }, function(response)
                {
                    //$('#resultarea').fadeOut();
                    setTimeout("finishAjax('resultarea','"+escape(response)+"')", 400);
                }
                );
            } 
            return false;                    
        });

    });

和回调:

function finishAjax(id, response) {
        $('#waitimg').hide();
         $.getScript("js/script.js");
        $('#'+id).html(unescape(response));
        $('#'+id).fadeIn();
    }

它应该从js / script.js执行脚本,但事实并非如此。使用Firebug我可以看到文件已加载但是在script.js中的简单警报(“hello world”)未被触发。为什么呢?

1 个答案:

答案 0 :(得分:1)

setTimeout期望引用到函数,而不是字符串作为第一个参数。替换:

setTimeout("finishAjax('resultarea','"+escape(response)+"')", 400);

使用:

setTimeout(function()
{
    return finishAjax.apply(this, ['resultarea', escape(response)]);//call as though finishAjax was callback --> preserve context
    //or, if you don't care about the context:
    return finishAjax('resultarea', escape(response));
}, 400);

你已经完成了