JQuery ajax发布请求在选项上被取消

时间:2014-01-25 19:27:57

标签: javascript jquery ajax node.js

我有一个Node.js后端,我将其设置为接收对给定网址的发布请求。当我通过Advanced Rest Client Chrome Extension发布帖子时,一切都很棒,帖子很成功。我的后端代码没有错误。但是,当我从客户端应用程序发布帖子时,调用将在选项请求中被取消。我知道这通常与不正确的标题或跨源问题有关,但我已将服务器设置为以下规范:

节点应用:

res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Accept');

客户端代码:

var sendObj = {};

sendObj.firstName = firstName;
sendObj.lastName = lastName;
sendObj.address = address;
sendObj.phone = phone;
sendObj.email = email;
sendObj.birthday = birthday;
sendObj.gender = gender;
sendObj.codingExperience = codingExperience;
sendObj.whyInterested = whyInterested;
sendObj.referralInformation = referralInformation;
if(referralInformation != "Other"){
    sendObj.otherReferral = "N/A";
}
else{
    sendObj.otherReferral = otherReferral;
}

var url = "http://url-to-server/postendpoint";

if(errors == false){
    $.ajax({
        type: "POST",
        url: url,
        contentType:"application/json",
        dataType: "json",
        beforeSend: function (xhr){ 
            xhr.setRequestHeader("Content-Type", "application/json"); 
        },
        data: sendObj,
        success: successOther()
    });
}
else{
    alert("Please fill in all the fields before submitting.");
}

我已经搜索了我的请求,看看是否与Advanced Rest Client中发送的内容有什么不同,但我找不到任何内容。以下是ARC的回复信息。

请求标题:

User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: application/json 
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,pt;q=0.6
Cookie: _ga=GA1.2.1462765942.1389934532

我很乐意帮助我弄清楚为什么这可能无法在我的客户端应用上运行。

3 个答案:

答案 0 :(得分:0)

我不熟悉节点,但这可能会有所帮助:

https://gist.github.com/nilcolor/816580

答案 1 :(得分:0)

所以我还没有找到问题究竟是什么。但是,我确实发现它与我的JQuery调用有关。我决定使用Angular.js $http.post()请求代替服务器的帖子,一切都运行得很漂亮。所以我猜我在JQuery帖子中以某种方式错误地设置了我的标题,因为这是导致OPTIONS请求失败的常见问题,但现在似乎工作正常!如果有人知道我到底做错了什么,那就太棒了!

答案 2 :(得分:0)

尝试添加X-Requested-With作为允许的标头。 jQuery在发送AJAX请求时添加了这个标头。