Обновить URL в JavaScript с помощью AJAX - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь обновить партнерский URL, который находится внутри фрагмента JavaScript, с помощью AJAX, но не могу заставить его работать.

Вот код:

<script type="text/javascript">
    (function() {
        var mdWidgetUrl = "https://herecomestheurl";
        var s = document.createElement("script"), 
            s1 = document.getElementsByTagName("script")[0];
        s.type = "text/javascript";
        s.async = true;
        s.src = mdWidgetUrl;
        s1.parentNode.insertBefore(s, s1);
    })();
    function fetchdata(){
        $.ajax({
            url: 's.src',
            type: 'post',
            success: function(data){
                // Perform operation on return value
                alert(data);
            },
            complete:function(data){
                setTimeout(fetchdata,10000);
            }
        });
    }        
    $(document).ready(function(){
        setTimeout(fetchdata,10000);
    });                
</script>

Я пытаюсь сделать так, чтобы AJAX перезагружал URL-адрес, известный как «mdWidgetUrl», каждые 10 секунд без обновления всей страницы. Этот код не работает, потому что я не знаю, как пометить s.src в функции AJAX.

1 Ответ

0 голосов
/ 30 октября 2018

Давайте посмотрим на различные настройки вашего вызова AJAX:

url:

При попытке:

url: 's.src',

вы не передаете содержимое свойства src объекта s; вы буквально передаёте строку "s.src". Но даже если вы делаете:

url: s.src,

это не сработает, потому что s находится вне области видимости. s был объявлен внутри IIFE ((function() {...), и он живет только внутри него Вы не можете получить к нему доступ извне.

Вместо этого, после создания сценария s, вы можете присвоить ему id. Как это:

var s = document.createElement("script");
s.id = "mdWidgetScript";

Затем вы можете легко получить значение атрибута src из вызова ajax:

$.ajax({
  url: $("#mdWidgetScript").attr('src'),

Обратите внимание, что использование id не является обязательным. Вы можете найти скрипт, который вы нашли s1, выбрав первый элемент с тегом <script>:

url: document.getElementsByTagName("script")[0].getAttribute("src");
// or with jQuery
url: $("script:eq(0)").attr('src');

Я просто нахожу использование id более чистого и более пуленепробиваемого способа.

type:

Это псевдоним для method. Вы получаете данные с сервера, а не отправляете на. Переключите POST на GET (или не используйте этот параметр, поскольку GET является значением по умолчанию). Прочитайте этот вопрос о различиях.

dataType

Вы должны установить dataType соответственно (отметьте этот вопрос ). Если URL указывает на скрипт, используйте dataType: "script",. На самом деле, вы можете использовать $.getScript(), который является сокращенным методом для такого вызова AJAX.


Если после правильной настройки параметров у вас все еще есть проблемы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...