确保加载JS文件并在调用另一个函数之前调用JS函数

时间:2014-02-12 11:30:49

标签: javascript jquery ajax wordpress

我遇到跟踪代码无法正常工作的问题,因为在加载所需的JS脚本和函数之前调用它。情况如下:

成功提交表单(WordPress上的CF7)后立即调用以下函数。

    function fn111Rooms(){
       var email_address = document.getElementsByName("your-email")[0].value;
       fnTransaction('Room booked', 'userid=' + email_address);
       location.replace('http://example.com/thank-you');
     }

但问题是,需要事先调用以下脚本+函数才能使一切正常工作

<script type="text/javascript" src="http://www.example.com/Tracking.js"></script>
<script>fnPageHit('4ddc12d4344');</script>

此位位于每个页面的部分,但在表单提交时不会再次调用,因为表单通过AJAX提交(我相信这是问题)。

如何将脚本包含在fn111Rooms中,并确保按顺序正确调用所有内容。真的很抱歉,如果这是一个愚蠢的问题,但JS不时让我感到困惑。

编辑:这会有用吗?

function fn111Rooms(){

    // Loads the script
    var fileref=document.createElement('script')
    fileref.setAttribute("type","text/javascript")
    fileref.setAttribute("src", "http://www.example.com/Tracking.js")

    // Calls the required function
    fnPageHit('4ddc12d4344');

    // Does the rest
    var email_address = document.getElementsByName("your-email")[0].value;
    fnTransaction('Room booked',    'userid=' + email_address);
    location.replace('http://example.com/thank-you');
 }

然后在提交表单时调用一个函数..?

2 个答案:

答案 0 :(得分:0)

您可以查看jQuery.when()

假设你有一个必须执行的功能

function yourFirstFunction(){ 
    $.post('/somewhere'); 
} 

第一次完成后第二次

function yourOtherFunction() {
    //stuff
}

然后您可以使用以下构造

$.when( yourFirstFunction() ).then(function(data) { 
    yourOtherFunction()
})

yourFirstFunction完成时(ajax请求已完成)yourSecondFunction将被执行

答案 1 :(得分:0)

一种方法是使用一些间隔应用无限循环并检查以下条件

fnPageHit&amp;&amp; fnPageHit( '4ddc12d4344');

所以当ile被加载时你会在其他情况下得到函数fnPageHit将是未定义因此它将不会执行并且不会导致错误