2014-10-23 3 views
1

Я пытаюсь запустить основной вызов Ajax с использованием JQuery на клиенте и node.js на сервере. клиент загружается с того же сервера, что и для обработки запроса Ajax один - пока я получаю на стороне клиента, эту ошибку:такая же политика происхождения с локальным сервером

«XMLHttpRequest не может загрузить .... Нет«Access-Control-Allow-Origin 'заголовок присутствует в запрошенном ресурсе. Следовательно, для источника ...... не разрешен доступ ".

Я думаю, что такая же политика происхождения, конечно же, не нарушена здесь? возможно, местный хозяин рассматривается по-разному?

сервер:

httpListen.createServer(function (req, res) { 
.... 
res.writeHead(200, {'Content-Type': 'text/plain'}); 
res.end('_testcb(\'{"message": "Hello world!"}\')'); 
} 

клиент:

$.ajax({ 
     url: "http://127.0.0.1:1337/", 
     data : {formType:"ajaxTest", key1:"val1", key2:"vall2"}, 
     formType:"ajaxTest", 
     jsonpCallback: "_testcb", 
     cache: false, 
     timeout: 5000, 
     success: function(data) { 
        $("#textBox").text("replied"); 
       }, 
     error: function(jqXHR, textStatus, errorThrown) { 
        alert('error ' + textStatus + " " + errorThrown); 
       } 
     }); 

это написано после руководящих принципов 1-го ответа здесь: how to use jQuery ajax calls with node.js, но я все еще получаю указанную ошибку.

редактировать: нашел проблему: используя локальный вместо 127.0.0.1, работает отлично ...

ответ

4

Из Вашего вопроса я вижу три возможности:

  1. Same Origin Policy не только заботиться о сервере, порт должен быть таким же, как и (и протокол). Таким образом, страница, обслуживаемая с порта 80, не может отправить запрос на порт 1337, если вы не используете Cross-Origin Resource Sharing.

  2. В качестве альтернативы, если вы обслуживаете страницу с порта 1337 (который является портом, который вы используете для вашего запроса ajax), убедитесь, что вы используете то же имя для сервера, как для загрузки страницы, так и для сделать запрос. Обратите внимание, что 127.0.0.1 и localhost не считаются одинаковыми для целей SOP.

  3. Если вы загружаете страницу из файловой системы , а не на сервере (например, URL страницы, начинается с file://, дважды щелкнул файл в проводнике файлов или что-то, чтобы открыть его), то проблема в том, что почти все по-другому, начиная с протокола (file:! = http:).

+0

Спасибо за ваш ответ, страница была загружена из того же порта в качестве целевого АЯКСА (1337) –

+1

но хороший момент на разнице между локальным и 127.0.0.1 - на самом деле это был ключ к решению проблемы, см мой отредактированный вопрос. –

Смежные вопросы