Javascript 从请求数据动态创建SVG

Javascript 从请求数据动态创建SVG,javascript,html,svg,Javascript,Html,Svg,我尝试过谷歌搜索,但是html中关于svg的信息非常混乱。我有一个相当复杂的场景,至少对我来说是这样: 使用jQuery,我不想基于GET请求的响应数据在div(id=“手动重新填充图像”)内动态创建svg对象。svg将包含图像数据和其他svg元素。如果GET请求失败,则div的全部内容应设置为fail函数中的消息。最后,在图像完全下载/加载后,需要做出向用户显示内容的决定 到目前为止,我得到的是: function load_grid_svg() { show_gridimage =

我尝试过谷歌搜索,但是html中关于svg的信息非常混乱。我有一个相当复杂的场景,至少对我来说是这样:

使用jQuery,我不想基于GET请求的响应数据在div(
id=“手动重新填充图像”
)内动态创建svg对象。svg将包含图像数据和其他svg元素。如果GET请求失败,则div的全部内容应设置为fail函数中的消息。最后,在图像完全下载/加载后,需要做出向用户显示内容的决定

到目前为止,我得到的是:

function load_grid_svg() {

    show_gridimage = true;
    $.get(
        "/api/results/gridding/svg",
        function (data) {
            svg = document.importNode(data, true);
            $("#manual-regridding-image").html(svg);
        }
    ).fail(function() {
        $("#manual-regridding-image").html("<em>Could not find the grid image! Maybe gridding failed last time?</em>");
    }).always(function() {
        if (show_gridimage) {
            $("#manual-regridding-image").show();
        } else {
            $("#manual-regridding-image").hide();
        }
    });
}

根本不知道为什么需要
文档.importNode

您可以使用
$.html()
将svg的内容添加到文档中

检查此示例:

svgstr=''
$('#btn1')。单击(函数(){
$('#a1')。追加(svgstr)
});

一些文本

单击添加SVG
根本不知道为什么需要
文档。导入节点

您可以使用
$.html()
将svg的内容添加到文档中

检查此示例:

svgstr=''
$('#btn1')。单击(函数(){
$('#a1')。追加(svgstr)
});

一些文本

单击以在JavaScript中添加SVG,您可以使用XMLHttpRequest并将SVG文件responseText直接加载到Div innerHTML中。回调函数还可以调用任何加载后事件。这还提供了对div中每个svg元素的访问

见下例:


将SVG加载到DIV中
函数callSVGfile()
{
/*
var SVGFile=“mySVGfile.svg”
var loadXML=newXMLHttpRequest;
loadXML.onload=回调;
loadXML.open(“GET”,SVGFile,true);
loadXML.send();
函数回调()
{
//---响应文本---
mySVGdiv.innerHTML=loadXML.responseText
}
*/
mySVGdiv.innerHTML=loadXMLreponseText
}
var loadXMLreponseText=“”+
''+
''+
''

在JavaScript中,您可以使用XMLHttpRequest并将svg文件responseText直接加载到Div innerHTML中。回调函数还可以调用任何加载后事件。这还提供了对div中每个svg元素的访问

见下例:


将SVG加载到DIV中
函数callSVGfile()
{
/*
var SVGFile=“mySVGfile.svg”
var loadXML=newXMLHttpRequest;
loadXML.onload=回调;
loadXML.open(“GET”,SVGFile,true);
loadXML.send();
函数回调()
{
//---响应文本---
mySVGdiv.innerHTML=loadXML.responseText
}
*/
mySVGdiv.innerHTML=loadXMLreponseText
}
var loadXMLreponseText=“”+
''+
''+
''

如@Tomalak在注释中所示,响应是一个
XMLDocument
,而不仅仅是
字符串,因此要使其正确显示
$中的回调,get
应该是:

    function (data) {
        $("#manual-regridding-image").append(data.documentElement);
    }
function (data) {
    $("#manual-regridding-image").append(data.documentElement);
}

为确保div仅显示最新的内容,请使用
$(#手动重新填充图像”).empty()
需要在
$.get
-调用之前执行。

如@Tomalak在注释中所示,响应是
XMLDocument
,而不仅仅是
..
字符串,因此要使其在
$中正确显示回调,get
应该是:

    function (data) {
        $("#manual-regridding-image").append(data.documentElement);
    }
function (data) {
    $("#manual-regridding-image").append(data.documentElement);
}

为确保div仅显示最新的内容,需要在调用
$之前执行
$(#手动重新填充图像”).empty()
。get
-调用。

它是如何工作的?发生了什么事?这可能有点过头了,你可以试着用@JosephYoung我会调查一下的,谢谢。
数据的类型是什么?是文件吗?如果是,请尝试
document.importNode(data.documentElement)
。另外,使用
.append()
而不是
.html()
。不要认为从ajax调用中获得的数据是svg文档,而只是文本。无论哪种方式,这里都不需要importNode,只要添加svg文本就可以了,如果它的名称空间正确的话?发生了什么事?这可能有点过头了,你可以试着用@JosephYoung我会调查一下的,谢谢。
数据的类型是什么?是文件吗?如果是,请尝试
document.importNode(data.documentElement)
。另外,使用
.append()
而不是
.html()
。不要认为从ajax调用中获得的数据是svg文档,而只是文本。不管怎样,这里不需要importNode,只要能够添加svg文本,只要它的名称空间正确等等。