Javascript 是否可以动态替换html页面的脚本部分?
我在开始一个页面时,会向Chart.JS charts提供一些罐装/模拟数据,例如:Javascript 是否可以动态替换html页面的脚本部分?,javascript,jquery,ajax,asp.net-ajax,script-tag,Javascript,Jquery,Ajax,Asp.net Ajax,Script Tag,我在开始一个页面时,会向Chart.JS charts提供一些罐装/模拟数据,例如: data: [2755, 2256, 1637, 1608, 1603, 1433, 1207, 1076, 1056, 1048], 我想用真实/实时数据替换那些虚假数据。我可以用AJAX调用返回的内容替换html页面的部分吗 瞧,我能不能这样做: $.ajax({ type: 'GET',
data: [2755, 2256, 1637, 1608, 1603, 1433, 1207, 1076, 1056, 1048],
我想用真实/实时数据替换那些虚假数据。我可以用AJAX调用返回的内容替换html页面的
部分吗
瞧,我能不能这样做:
$.ajax({
type: 'GET',
url:
'@Url.RouteUrl(routeName: "QuadrantData"
routeValues: new { httpRoute = true, unit = "un", begdate = "bd", enddate
"ed" })'
.replace("un", encodeURIComponent(_unit))
.replace("bd", encodeURIComponent(_begdate))
.replace("ed", encodeURIComponent(_enddate)),
contentType: 'text/plain',
cache: false,
xhrFields: {
withCredentials: false
},
success: function (returneddata) {
$("script").html(returneddata);
$("#newhourglass").addClass("hide");
},
error: function () {
console.log('error in ajax call t
QuadrantData');
$("#newhourglass").addClass("hide");
}
});
$("script").html(returneddata);
?
低,而不是:
$("html").html(returneddata);
…或类似的,类似这样的东西:
$.ajax({
type: 'GET',
url:
'@Url.RouteUrl(routeName: "QuadrantData"
routeValues: new { httpRoute = true, unit = "un", begdate = "bd", enddate
"ed" })'
.replace("un", encodeURIComponent(_unit))
.replace("bd", encodeURIComponent(_begdate))
.replace("ed", encodeURIComponent(_enddate)),
contentType: 'text/plain',
cache: false,
xhrFields: {
withCredentials: false
},
success: function (returneddata) {
$("script").html(returneddata);
$("#newhourglass").addClass("hide");
},
error: function () {
console.log('error in ajax call t
QuadrantData');
$("#newhourglass").addClass("hide");
}
});
$("script").html(returneddata);
我可以用AJAX调用返回的内容替换html页面的[脚本]部分吗
不,你不能。一旦一个脚本被浏览器解释,它仅仅是display:none的文本代码>。事实上,您可以删除所有脚本$('script')。删除()
,对页面本身没有任何影响
这是因为脚本一旦执行,环境就会根据代码所做的事情而改变,并反映执行代码的变化
相反,您应该尝试更改已分配给的数据
变量,并使用该新数据重新初始化图表。或者,您可以在新数据出现时添加新图表。无论哪种方式,从ajax成功中获取数据的过程都需要在代码中完成,而不是简单地替换脚本标记的html
为了执行ajax调用返回的任何脚本,您可以对页面上的元素使用.html(htmlWithScriptElements)
,jQuery将在内部为您执行脚本(使用eval
)
我可以用AJAX调用返回的内容替换html页面的[脚本]部分吗
不,你不能。一旦一个脚本被浏览器解释,它仅仅是display:none的文本代码>。事实上,您可以删除所有脚本$('script')。删除()
,对页面本身没有任何影响
这是因为脚本一旦执行,环境就会根据代码所做的事情而改变,并反映执行代码的变化
相反,您应该尝试更改已分配给的数据
变量,并使用该新数据重新初始化图表。或者,您可以在新数据出现时添加新图表。无论哪种方式,从ajax成功中获取数据的过程都需要在代码中完成,而不是简单地替换脚本标记的html
为了执行ajax调用返回的任何脚本,您可以对页面上的元素使用.html(htmlWithScriptElements)
,jQuery将在内部为您执行脚本(使用eval
) 我将补充特拉维斯和其他评论者所说的内容
解析HTML时,只要看到关闭的脚本
标记,就会执行脚本
标记。剩下的只是一个带有内部文本的标记。我将用下面的代码片段演示这种行为
脚本{
显示:块;
背景:白色;
最小高度:100px;
边框:1px纯黑;
空白:预处理;
字体大小:13px;
}
以下脚本每秒向上计数。但是编辑它不会改变它的后效。
计数器=0;
counterInterval=setInterval(函数已单击(){
console.log(counter++);
},1000);
我将补充特拉维斯和其他评论者所说的内容
解析HTML时,只要看到关闭的脚本
标记,就会执行脚本
标记。剩下的只是一个带有内部文本的标记。我将用下面的代码片段演示这种行为
脚本{
显示:块;
背景:白色;
最小高度:100px;
边框:1px纯黑;
空白:预处理;
字体大小:13px;
}
以下脚本每秒向上计数。但是编辑它不会改变它的后效。
计数器=0;
counterInterval=setInterval(函数已单击(){
console.log(counter++);
},1000);
您无需将其添加到HTML页面,您的数据已保存在returnddata中,只需将其分配给图表即可。。如。。myChart.datasets[0]。数据=返回的数据;myChart.update();。您可以删除原始脚本节点并创建一个新的脚本节点,而不是设置脚本的“html”(不会执行),或者只需对修改后的字符串执行“eval()”。但是a)很难说这种特殊的效果是否真的能满足你的需要,b)你不能仅仅修改图表的数据属性(而不是试图编辑一个可能/可能还没有执行的脚本)从简单地更新图表数据到替换html标记中的所有内容之间有很长的路要走。图表应该能够重新加载,如果不只是替换它并重新初始化它,我的页面上有三个图表,所以我不能只将所有返回的数据分配给一个图表。我可能需要创建三个不同的ajax调用。我不知道是否可以简单地“替换[图表]并再次初始化它”,因为来自html语句的图表是一个简单的“画布”标记;它的生命力在于javascript,它为图表提供数据和选项,并创建图表。您不需要将其添加到HTML页面,您的数据位于returnddata中,只需将其分配给图表即可。。如。。myChart.datasets[0]。数据=返回的数据;myChart.update();。您可以删除原始脚本节点并创建一个新的脚本节点,而不是设置脚本的“html”(不会执行),或者只需对修改后的字符串执行“eval()”。但是a)很难说这种特殊的效果是否真的能满足你的需要,b)你不能仅仅修改图表的数据属性(而不是试图编辑一个可能/可能还没有执行的脚本)从简单地更新图表数据到替换html标记中的所有内容之间有很长的路要走。图表应该能够重新加载,如果不只是替换它并重新初始化它,我的页面上有三个图表,所以我不能