发布ajax请求发送选项请求而不是帖子

时间:2017-06-08 09:31:57

标签: javascript node.js ajax

我发送了一条ajax请求:

var responsehttpreq = {}
function createAndSendXmlHttpReq(){
    requestBody = {
        hostname: "prova",
        pathname: "prova",
        query: "prova",
        method: "prova"
    }
    console.log("Siamo nella funzione createAndSendXmlHttpReq")
    var req = new XMLHttpRequest()
    req.onreadystatechange = handler
    req.open("POST","http://localhost:8080",true)
    req.setRequestHeader("Content-type","application/json")
    req.send(JSON.stringify(requestBody))
}

function handler(){
    if(this.readyState == 4 && this.status == 200){
        console.log('----Risposta http------')
        console.log('Status Code:'+this.status)
        console.log('Dati:'+this.response)
        responsehttpreq = JSON.parse(this.response)
    }
}

从html页面的按钮调用createAndSendXmlHttpReq(),当我按下按钮时我没有收到任何响应,但我可以从开发者控制台看到已发送选项请求,用于CORS选项。 我已经实现了一个节点js服务器,如果选项请求发送了正确的响应:

if(req.method == "OPTIONS"){
        res.setHeader("Access-Control-Allow-Origin","*")
        res.setHeader("Access-Control-Allow-Methods","POST")
        res.setHeader("Access-Control-Request-Headers","content-type")
        res.end()
    }

浏览器从服务器接收200 ok响应选项请求,但之后我的ajax post请求不会到达服务器。 有什么问题?

1 个答案:

答案 0 :(得分:3)

res.setHeader("Access-Control-Allow-Origin","*")

响应preflight OPTIONS requestAccess-Control-Allow-Origin标头无法使用通配符。

您的浏览器的控制台应该告诉您。

您需要查看Origin请求标头,确定您是否可以接受,然后将其用作Access-Control-Allow-Origin标头的值。