Функция Javascript не будет работать - PullRequest
0 голосов
/ 24 января 2012

У меня есть следующий скрипт:

<script>
    (function(d, s, id, p) {
var js, ins = d.getElementsByTagName(s)[0];
    js = d.createElement(s); 
    js.src = "http://www.site.com/feeds/run.php?id="+id+"&p="+p;
    ins.parentNode.insertBefore(js, ins);
data();
}(document, 'script', 131, 'large'));
</script>

run.php на самом деле возвращает JavaScript, который работает нормально и выполняет несколько функций, но функция, которую я вызываю в приведенном выше скрипте (data ();), не будет выполняться. Функция данных читает:

function data(){
    var u;
    alert("I am an alert box");
    u = document.URL;
    document.body.innerHTML += '<form id="dynForm" target="transFrame" action="http://www.site.com/data.php" method="post"><input type="hidden" name="u" value="'+u+'"></form>';
    document.getElementById("dynForm").submit();
}

Если у кого-то есть информация, которая может помочь мне запустить эту функцию, она будет очень признательна.

- Крис Крики - Я проверил все функции, и они в порядке. Если я вставлю сценарий как:

<script type="text/javascript" src="http://www.site.com/feeds/run.php"></script>

Но я не могу использовать эту строку, потому что я намерен, чтобы люди добавили это на свои сайты и не хотели, чтобы они удаляли эти строки, чтобы остановить определенные операции. Но когда я использую этот метод, мне приходится выбирать между запуском других функций в файле или этой.

1 Ответ

3 голосов
/ 24 января 2012

После вставки скрипта, содержащего функцию данных, вы не ждете окончания загрузки скрипта, поэтому функция данных еще не доступна.

Попробуйте это:

(function(d, s, id, p) {
var js, ins = d.getElementsByTagName(s)[0];
    js = d.createElement(s); 
    js.src = "http://www.site.com/feeds/run.php?id="+id+"&p="+p;
    ins.parentNode.insertBefore(js, ins);
    var timer = setInterval(tryData, 100);
    function tryData()
    {
        if(window.data)
        {
            clearInterval(timer);
            data();
        }
    }
}(document, 'script', 131, 'large'));
...