Эта проблема не может быть новой проблемой для многих новичков. Я один из них, и я должен решить эту проблему на стороне клиента. Поэтому, пожалуйста, не отмечайте эту проблему как повторяющуюся.
У меня есть клиентский код моего веб-сайта, развернутый на сервере, и этот веб-сайт вызывает веб-сервис, развернутый на каком-то другом другом сервере. (Обратите внимание: у меня нет доступа к коду этого веб-сервиса).
Мой код AJAX для получения данных:
$.ajax({
type: 'GET',
url: 'http://webservice_url',
success: function (data) {
//success
},
failure: function(error){
//error
}
});
При доступе к этому веб-сервису через AJAX я получаю:
XMLHttpRequest cannot load http://webservice_url. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
Журнал консоли браузера:
- Я могу успешно просмотреть ответ своего веб-сервиса в консоли браузера (на вкладке «Сеть» -> вкладка «Ответ» моего веб-сервиса). Тем не менее, получение вышеуказанной ошибки.
При просмотре многих предыдущих сообщений я обнаружил, что, установив заголовок ответа как:
response.addHeader("Access-Control-Allow-Origin", "*");
исправит эту проблему.
Однако у меня нет доступа для изменения кода моего веб-сервиса, чтобы добавить заголовок ответа. Я должен исправить это на сайте.
Я разработал этот веб-сайт с помощью ExpressJS и Node. Мой код приложения
var http = require('http');
var routes = require('./routes');
var express = require('express');
var path = require('path');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.cookieParser('secret code'));
app.use(express.logger('dev'));
app.use(express.favicon());
app.use(express.methodOverride());
app.use(express.session());
app.use(express.bodyParser());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// Add headers
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Pass to next layer of middleware
next();
});
app.get('/', routes.index);
http.createServer(app).listen(3000, function(){
console.log('Express server started successfully');
});
Добавление res.setHeader('Access-Control-Allow-Origin', '*')
мне не помогло.
Может ли кто-нибудь направить меня.