我正在尝试使用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
。
答案 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调用的一种简写方法。
如果在正确调整设置后仍然遇到问题: