使用ajax在javascript中重新加载URL

时间:2018-10-29 20:55:11

标签: javascript jquery ajax

我正在尝试使用AJAX刷新JavaScript片段中的关联URL,但无法正常工作。

代码如下:

<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>

我要做的是每10秒AJAX重新加载URL,即“ mdWidgetUrl”,而不刷新整个页面。该代码不起作用,因为我不知道如何在AJAX函数中标记s.src

1 个答案:

答案 0 :(得分:0)

让我们看看您的AJAX调用中的其他settings

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";

然后,您可以轻松地从ajax调用中检索src属性的值:

$.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是默认设置)。阅读this question中的差异。

dataType

您应该相应地设置dataType(选中this question)。如果URL指向脚本,请使用dataType: "script",。实际上,您可以使用$.getScript(),这是这种AJAX调用的一种简写方法。


如果在正确调整设置后仍然遇到问题: