2017-07-20 16 views
-1

我送http要求到我的服务器和响应是一个html:使用Javascript - 刷新当前标签与HTTP响应

<html> 
<head> 
    <link rel = "stylesheet" type="text/css" href="CSS/jQUERYUI.css"> 
</head> 
<body> 
<div id = "first"> 
data : someData 
</div> 
</body> 
</html> 

我想当前页面将与响应数据刷新,所以我尝试:

$http({ 
    method: 'POST', 
    url: '/someUrl' 
}).then(function(response) { 
     var win = window.open(window.location.href, '_blank'); 
     $(win.document.body).html(response.data) 
    }, function(error) { 

    }); 

还有一些使用js 535-ways-to-reload重新加载页面的535种方法。 我仍然无法使用响应html重新加载当前页面。

另外我希望当前页面的网址不会改变。 angularjs这样做的方式也很棒。

感谢蚂蚁的帮助。

+0

为什么您的服务器返回HTML? – Nicolas

+0

您可能应该将响应数据存储在控制器的属性中,并使用ng-bind-html或者可能只是ng-bind-html将元素绑定到您的控制器函数。 –

+0

@Nicolas - 它是在长时间的完成过程之后创建的。 –

回答

1

你快到了。当你从服务器收到html时,你用它重写文档。但不要重定向到本身,否则浏览器会再次重写。

$http({ 
    method: 'POST', 
    url: '/someUrl' 
}).then(function(response) { 
     $(win.document.body).html(response.data) 
    }, function(error) { 

    }); 
2

为什么不把它路由到/someUrl在身体内的主要股利?

+0

你也可以改变视图,这将不会改变urll – Nicolas

+0

你可以发布一个例子 - 我不想要用'routeProvider'如果这是你的意思,并且html是动态创建的,所以没有'html'文件在服务器上。 –

+0

要路由,不需要在服务器中有一个html文件。如果api正在返回,那么它也会起作用 –

0

你不需要刷新页面,只覆盖当前页面的JavaScript在HTML:

window.document.body.parentNode.innerHTML = response.data; 

当你的结果具有HTML标签已经,你可能想要去除那些第一:

response.data.replace(/<?\/html>/, '');