Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以动态替换html页面的脚本部分?_Javascript_Jquery_Ajax_Asp.net Ajax_Script Tag - Fatal编程技术网

Javascript 是否可以动态替换html页面的脚本部分?

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

我在开始一个页面时,会向Chart.JS charts提供一些罐装/模拟数据,例如:

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标记中的所有内容之间有很长的路要走。图表应该能够重新加载,如果不只是替换它并重新初始化它,我的页面上有三个图表,所以我不能