$ .post (в другой домен) не работает (приложение node.js / express на порту 8081)

0

Я получаю сообщение об ошибке POST https://thewebsite.com 400 (Bad Request) при использовании $.post таким образом:

$.post("https://website.com/blabla",
{
  domain: "infoinfo.com",
  room: "someInfo",
  application: "someInfo",
  ident: "someInfo",
},
function (data,status) {
  alert("Data: " + data + "\nStatus: " + status);
});

Я попытался установить res.header('Access-Control-Allow-Origin', "*"); на моем маршруте, но это не сработало.

Любые идеи о том, как я могу это исправить?

Ps.: Сервер, на который я отправляю, является сайтом службы (xirsys.com), я уверен, что они уже разрешают внешние домены. Я свяжусь с ними в течение дня, если я не смогу найти решение (я использую сообщение jQuery, как они предположили:/

  • 0
    CrossDomain должен быть включен на сервере, который вы публикуете данные
Теги:
express
cors

4 ответа

0
Лучший ответ

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

0

ЗАПРОС ОБРАЗЦА:

$.ajax({
            url: "http://yoururl",
            type: "POST",
            crossDomain: true,
            data: JSON.stringify(somejson),
            dataType: "json",
            success: function (response) {
                alert("success");
            },
            error: function (xhr, status) {
                alert("error");
            }
        });

РЕЗУЛЬТАТЫ ОБРАЗЦОВ В ПИТОНЕ:

response = HttpResponse(json.dumps('{"status" : "success"}'))
response.__setitem__("Content-type", "application/json")
response.__setitem__("Access-Control-Allow-Origin", "*")

return response
0

Попытайтесь добавить это в свой вызов AJAX:

contentType: "application/json; charset=utf-8",
dataType: "json"

Другая причина, возможно, из-за той же политики происхождения:

При вычислении одна и та же политика происхождения является важной концепцией безопасности для ряда языков программирования на стороне браузера, таких как JavaScript. Политикой разрешены сценарии, выполняемые на страницах, происходящих из одного и того же сайта, для доступа к другим методам и свойствам без каких-либо конкретных ограничений, но предотвращает доступ к большинству методов и свойств между страницами на разных сайтах.

Вы можете узнать больше информации об этой проблеме в документах MDN или провести исследование Google по этой теме.


Вы можете попробовать использовать $.axax() следующим образом:

$.ajax({
    type: 'POST',
    url: "https://website.com/blabla",
    data: {
        domain: "infoinfo.com",
        room: "someInfo",
        application: "someInfo",
        ident: "someInfo"
    },
    dataType: "json",
    contentType: "application/json",
    success: function (e) {
        alert("Data: " + data + "\nStatus: " + status);
    }

});
  • 0
    Сообщение на самом деле для beta.xirsys.com/getIceServers - я почти уверен, что они уже разрешают внешние домены. Как бы вы добавили contentType / dataType в мой пример?
  • 0
    Просто изменив $ .post на $ .getJSON, добился цели. Ух ты.
Показать ещё 3 комментария
0

Это связано с политикой одного и того же происхождения. Все браузеры в качестве меры безопасности не разрешали бы перекрестные запросы домена.

http://en.wikipedia.org/wiki/Same-origin_policy

Как и в вашем случае, вы отправляете домен thewebsite.com из другого домена. Работа вокруг заключается в использовании jsonp (сервер должен поддерживать json padding) из jquery.

Проверьте эти сайты для получения дополнительной информации.

http://www.jquery4u.com/json/jsonp-examples/
http://en.wikipedia.org/wiki/JSONP
http://stackoverflow.com/questions/6871021/how-to-enable-cross-domain-request-on-the-server

Ещё вопросы

Сообщество Overcoder
Наверх
Меню