2015-01-17 2 views
7

Вопрос говорит все. Как обновить «src» тега скрипта с помощью jQuery. Пусть говорят, у меня есть сценарий,Обновление src тега скрипта с помощью jQuery - перезагрузка скрипта с jQuery без обновления страницы

<script id="somescript" type="text/javascript" src=""></script> 

Так что, когда я щелчок на кнопке, нужно добавить ЦСИ сценария. Например,

<script id="somescript" type="text/javascript" src="linktoscript.js"></script> 

Я делаю это с помощью обработчика щелчков следующим образом, используя следующий код.

$("#somescript").attr("src","linktoscript.js"); 

Это фактически обновляет СРК, но когда я проверить его через поджигатель, он говорит мне, чтобы обновить страницу, чтобы получить скрипт работает.

Исследование:

После некоторых исследований, я нашел $ .get() из JQuery будет делать эту работу, и да, он загружает скрипт. Но это не моя работа.

Актуальная проблема:

Я пытаюсь загрузить код преобразования Google, используя Ajax с успешным представлением формы.

Вот часть сценария Ajax, которая должна работать для кода конверсии Google.

    if (res == "yes") { 
         $('#success').fadeIn().delay(5000).fadeOut(); 
         $('#regform')[0].reset(); 
         window.location.href = '#'; 
         /* <![CDATA[ */ 
         var google_conversion_id = xxxxxxxxx; 
         var google_conversion_language = "en"; 
         var google_conversion_format = "2"; 
         var google_conversion_color = "ffffff"; 
         var google_conversion_label = "CiaXCOXjzlcQy__EyQM"; 
         var google_remarketing_only = false; 
         /* ]]> */ 

$.getScript("http://www.googleadservices.com/pagead/conversion.js"); 
    } 

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

<script type="text/javascript"> 
    /* <![CDATA[ */ 
    var google_conversion_id = xxxxxxxxx; 
    var google_conversion_language = "en"; 
    var google_conversion_format = "2"; 
    var google_conversion_color = "ffffff"; 
    var google_conversion_label = "CiaXCOXjzlcQy__EyQM"; 
    var google_remarketing_only = false; 
    /* ]]> */ 
</script> 

<script type="text/javascript" src="#"></script> <!--Update this src--> 

<noscript> 
    <div style="display:inline"> 
    <img height="1" width="1" style="border-style:none;" alt="" src="#" /> 
    </div> 
</noscript> 

помощь?

Ссылка:

Вот ссылка на живой сайт: Link

Update: Это то, что я получаю. В панели сценария в Firebug, после представления формы, enter image description here

+0

Посмотрите на этот ответ: http://stackoverflow.com/questions/14521108/dynamically-load-js-inside-js – Joerg

+0

Предоставьте онлайн-ссылку, которая повторяет вашу проблему, чтобы ее можно было отладить. –

+0

@ A.Wolff. Спасибо за твою заботу. Я обновил сообщение и вставил ссылку. –

ответ

1

В конце концов, для меня была выполнена следующая работа. Благодаря JLRishe и A. Wolff за их поддержку.

В моем предыдущем коде были две проблемы.

  1. Я не вставлял элемент «img» вместе с другим кодом преобразования. (Глупая ошибка, но я впервые работал с конверсионным кодом. Поэтому, пожалуйста, простите меня).
  2. Вставка src тега "img" в формате по умолчанию даст ошибку. По умолчанию &amp; будет отображать ошибку Invalid URL encode при ответе AJAX. Спасибо за Tag Assitant. Вместо использования &amp; используйте & прямо так.

www.googleadservices.com/pagead/conversion/xxxxxxxxx/?label=CiaXCOXjzlcQy__EyQM & справ = OnScript = 0

Вот что, наконец, работал для меня.

if (res == "yes") { 
     $('#success').fadeIn().delay(5000).fadeOut(); 
     $('#regform')[0].reset(); 

     <!-- Google Code for Lead Conversion Page -->       
     /* <![CDATA[ */ 
     window.google_conversion_id = xxxxxxxxx; 
     window.google_conversion_language = "en"; 
     window.google_conversion_format = "2"; 
     window.google_conversion_color = "ffffff"; 
     window.google_conversion_label = "CiaXCOXjzlcQy__EyQM"; 
     window.google_remarketing_only = false; 
     /* ]]> */ 
     $.getScript("//www.googleadservices.com/pagead/conversion.js");        

     window.scriptTag2 = document.createElement('noscript'); 
     window.imgTag = document.createElement('img'); 
     imgTag.height = 1; 
     imgTag.width = 1; 
     imgTag.border = 0; 
     imgTag.src = "//www.googleadservices.com/pagead/conversion/xxxxxxxxx/?label=CiaXCOXjzlcQy__EyQM&guid=ONscript=0";         

    } 

Я надеюсь, что это поможет кому-то еще с той же проблемой. Спасибо.

0

Вы можете добавить тег сценария в DOM

if (yourCondition === true) { 
$('head') 
    .append($('<script id="somescript" type="text/javascript" src="linktoscript.js"></script>')); 
} 

Скрипт загружается в момент его присоединяемой, таким образом, вы имеете полный контроль когда он загружен.

+0

Я тоже пробовал. Результат тот же. Нулевые значения всех переменных преобразования –

+0

вы можете разместить свой полный скрипт или скрипку? Я не знаю, как работает поток/каскад событий, поэтому я не смог бы помочь, пока не узнаю об этом; Я не могу понять, почему эти переменные равны нулю, если я не знаю, где и когда они доступны относительно того, когда динамически добавлен сценарий – chiliNUT

+0

Я обновил сообщение и предоставил ссылку на сайт. Возможно, вы сможете полностью проверить это сейчас. –

2

Похоже, что сценарий конверсии Google полагается на google_conversion_id, google_conversion_language и т. Д., Чтобы быть доступным в качестве глобальных переменных. Предполагая, что код, который у вас там есть, выполняет внутри функции (что имеет смысл, если это внутри события), код, который у вас там, не будет работать, потому что переменные будут локальными для функции, в которой они находятся, и код google не будет иметь возможности добраться до них.

Есть две вещи, которые вы можете сделать.

Один определить эти переменные в глобальной области раньше времени, то есть сделать это:

<script type="text/javascript"> 
    /* <![CDATA[ */ 
    var google_conversion_id = xxxxxxxxx; 
    var google_conversion_language = "en"; 
    var google_conversion_format = "2"; 
    ... 
</script> 

(вы также можете поместить их во внешнем файле сценария и загрузить файл при загрузке страницы:

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

$.getScript("http://www.googleadservices.com/pagead/conversion.js"); 


Другой вариант заключается в назначении переменные в window объекта непосредственно перед загрузкой сценария, что эквивалентно, чтобы положить их в глобальном масштабе:

if (res == "yes") { 
    $('#success').fadeIn().delay(5000).fadeOut(); 
    $('#regform')[0].reset(); 
    window.location.href = '#'; 

    window.google_conversion_id = xxxxxxxxx; 
    window.google_conversion_language = "en"; 
    window.google_conversion_format = "2"; 
    window.google_conversion_color = "ffffff"; 
    window.google_conversion_label = "CiaXCOXjzlcQy__EyQM"; 
    window.google_remarketing_only = false; 

    $.getScript("http://www.googleadservices.com/pagead/conversion.js"); 
} 


Примечание: в связи с тем, что этот вопрос изначально возник, вы не можете загрузить скрипт, изменив атрибут src существующего элемента сценария:

http://jsfiddle.net/5vf6b924/

После script элемент загрузится все, что указано в src (даже если это #), он, по существу, «израсходован» и ничего не будет загружаться.

Что вы можете сделать, это создать новый script элемент и добавить его в DOM:

http://jsfiddle.net/ydu52cn1/

Это должно добиться успеха в загрузке сценария (асинхронно).

Как вы уже нашли, jQuery также предоставляет удобный способ $.getScript.

+0

Тем не менее, тот же результат. src обновляется, но firebug говорит, что мне нужно обновить страницу. –

+1

Как я вижу вопрос, это не имеет ничего общего с кешем, но скрипт не будет выполнен по какой-то причине –

+0

@ A.Wolff Я переписал свой ответ. – JLRishe

Смежные вопросы