2014-09-30 66 views
1

當前我有一種提交表單POST並在新窗口中打開的JavaScript方法。我想在AngularJS中重寫這個。使用AngularJS發佈到新窗口

這裏是現有的方法。傳入的3個參數僅影響POST後的URL和一些數據值。

var login = function(postUrl, samlResponse, samlDomain){ 
    var form = $('<form></form>'); 
    form.attr('method', 'post'); 
    form.attr('action', postUrl); 
    form.attr('target', '_blank'); 
    var field = $('<input></input>'); 
    field.attr('type', 'hidden'); 
    field.attr('name', samlResponse); 
    field.attr('text-wrap','none'); 
    field.attr('value', 'response-value'); 
    form.append(field); 
    var field2 = $('<input></input>'); 
    field2.attr('type', 'hidden'); 
    field2.attr('name', 'RelayState'); 
    field2.attr('value', samlDomain); 
    form.append(field2); 
    $(document.body).append(form); 
    form.submit(); 
} 

這是我嘗試使用$ HTTP

$scope.login = function(postUrl, samlResponse, samlDomain) { 
    var tabWindowId = window.open('about:blank', '_blank'); 
    var data = { 
     SAMLResponse: samlResponse, 
     RelayState: samlDomain 
    } 
    $http.post(postUrl, data).then(function (response) { 
     tabWindowId.location.href = response.headers('Location'); 
    }); 
} 

我還發現了以下錯誤,發生因爲網站不會讓我訪問響應爲此在AngularJS。我不一定需要訪問響應,我只是想在新窗口中打開它。

XMLHttpRequest cannot load {{postUrl}}. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:7631' is therefore not allowed access. 

我應該如何完成我想要的AngularJS?

我也在考慮將表單添加到HTML模板,但隱藏它與ng隱藏。然後,我不得不以某種方式觸發從我的AngularJS控制器中提交的表單,這看起來倒退了。

回答

0

我最終把登錄函數完全按照我的AngularJS控制器中的方式進行。不太滿意,因爲我使用jquery $(document.body).append(form)。但這是一個快速解決方案,希望看到其他答案。