我正在尝试刷新一个联盟网址,这是一个内部的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每10秒重新加载一次URL,也就是所谓的"mdWidgetUrl",而不是刷新整个页面。这段代码不起作用,因为我不知道如何在AJAX函数中标记s.src
。
发布于 2018-10-30 05:34:34
让我们来看看AJAX调用的不同settings:
url:
当你尝试的时候:
url: 's.src',
您传递的不是s
对象的src
属性的内容,而是字符串"s.src"
。但即使你这样做了:
url: s.src,
它不会工作,因为s
超出了范围。s
是在一个lives ( (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调用的一种简写方法。
如果正确调整设置后仍有问题:
其他问题:
:
https://stackoverflow.com/questions/53053660
复制相似问题