2017-07-20 52 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>/, '');