2013-10-06 46 views
4

Angular $ http.post方法未將JSON發佈到服務(RESTFul服務,節點服務)。 顯示以下錯誤:使用角度http.post方法發佈 - xmlhttprquest無法加載服務

XMLHttpRequest cannot load /some/service. Invalid HTTP status code 404

這裏是貼碼

$http({method:'POST', url:'/some/service/',data:{"key1":"val1","key2":"val2"}}).success(function(result){ 
    alert(result); 
}); 

相同的代碼正在與舊版本我的鉻即,V29的。 。*。我將我的鍍鉻版更新至V30。 。*。現在,它不工作。不在Firefox中工作。 Chrome和Firefox有什麼問題嗎?

任何人都可以幫忙嗎?

+0

您好,歡迎來到SO,請注意在發佈時將所有示例代碼放在代碼塊中。 – user65439

+0

這個電話是在同一個域名上嗎?我想你可能會試圖調用另一個域,以便瀏覽器出於安全原因而阻止它。嘗試JSONP,如果是這樣的話。 – hjgraca

回答

2

將Chrome更新到版本30.0.1599.101後,我遇到了類似的問題,結果證明是服務器問題。

我的服務器使用快車(http://expressjs.com/),並允許CORS下面的代碼(How to allow CORS?)實施效果很好:

var express = require("express"); 
var server = express(); 

var allowCrossDomain = function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', req.headers.origin || "*"); 
    res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS'); 
    res.header('Access-Control-Allow-Headers', 'content-Type,x-requested-with'); 
    next(); 
} 
server.configure(function() { 
    server.use(allowCrossDomain); 
}); 

server.options('/*', function(req, res){ 
    res.header('Access-Control-Allow-Origin', req.headers.origin || "*"); 
    res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS'); 
    res.header('Access-Control-Allow-Headers', 'content-Type,x-requested-with'); 
    res.send(200); 
}); 

server.post('/some_service', function (req, res) { 
    res.header('Access-Control-Allow-Origin', req.headers.origin); 

    // stuff here 

    //example of a json response 
    res.contentType('json'); 
    res.send(JSON.stringify({OK: true})); 
}); 

HTTP請求看起來像:

$http({ 
    method: 'POST', 
    url: 'http://localhost/some_service', 
    data: JSON.stringify({ 
     key1: "val1", 
     key2: "val2" 
    }), 
    headers: { 
     'Content-Type': 'application/json; charset=utf-8' 
    } 
}).success(
    function (data, status, headers, config) { 
     //do something 
    } 
).error(
    function (data, status, headers, config) { 
     //do something 
    } 
); 

正如在這裏指出, (https://stackoverflow.com/a/8572637/772020),這個想法是確保您的服務器正確處理OPTIONS請求以啓用CORS。

0

好吧,幾天前發佈了一個新的chrome更新。檢查該版本的補丁說明是否改變了與安全相關的任何內容。 幾天前,我的擴展程序在FF和Chrome中都停止了工作。