2017-10-08 70 views
0

我正在使用角Http角項目http發佈請求,&我收到以下錯誤。發送請求使用jquery,但不是在角

請求標頭字段Content-Type在預檢響應中不被Access-Control-Allow-Headers所允許。

但是,如果我用jquery發出這個post請求,我不會收到任何錯誤,它會按照需要的方式執行。

這是我使用的jQuery代碼&它沒有任何問題。

$(function() { 
    $.post(
    "http://www.anything.com/pdfGenerator/", 
    { 
     orientation: "portrait", 
     paperSize : "letter", 
     return_url : "true", 
     htmlContent: `<h1>Hello</h1>` 
    } 
).done(function (data) { 
    alert("Data Loaded: " + data); 
    }); 
}); 

這裏的角碼&它不工作,我得到上述錯誤。

this.url = "http://www.anything.com/pdfGenerator/"; 

let body:any = { 
    orientation: "portrait", 
    paperSize : "letter", 
    htmlContent: `<h1>Hello</h1>`, 
    return_url : "true", 
}; 

this.http.post(this.url, body). 
    subscribe(res => console.log(res)); 

我聽到人們說你Response-Header服務器端添加的內容類型。我的意思是,爲什麼我應該在服務器上添加這個響應頭文件,如果它使用jquery工作的很好。如果它正在通過jquery工作而沒有做任何額外的事情,那麼angular應該也會運行它而不會顯示錯誤。

我做錯了什麼?我應該怎麼做,使其運行在角度上而不需要修改服務器,因爲jquery已經在做它了?

回答

0

可能發生的一件事情是,jQuery發送的角度的$ http不同的Content-Type。這可能歸結爲默認值,因此您可以嘗試更新它以匹配jQuery(您可以檢查網絡請求以比較正在發送的標頭並找到差異)。 在這種情況下,可能是jQuery默認爲您的服務器期望的Content-Type,而角度默認爲其他值。要設置的角度,你可以使用下面的語法內容類型:[1]

this.http.post(this.url, body, { headers: {'Content-Type': 'application/json'} }) 

我看到字符串化的身體來解決這樣的問題的情況下,將不能夠告訴我們,如果這是你的情況下,在特定的我沒有訪問到您的環境,但你可以給它一個去:

this.http.post(this.url, JSON.stringify(body)) 

[1] https://docs.angularjs.org/api/ng/service/ $ HTTP#張貼