jQuery междоменный пост Phenhenigans - PullRequest
16 голосов
/ 20 июля 2011

Я пытаюсь пройти аутентификацию в API, который позволяет вам проходить аутентификацию только с использованием POST с JSON в качестве данных формы в формате {"username": "myusername", "password": "mypassword"}.

Я два дня пытался заставить это работать с jQuery, но у меня возникли проблемы, потому что это междоменный домен.Как я могу это сделать?

Сообщение об ошибке:

Request Method:OPTIONS
Status Code:405 METHOD NOT ALLOWED

Код до сих пор:

var username = "myusername";
var password = "mypass"
var authurl = "https://myurl";

$.ajax
({
    type: "POST",
    url: authurl,
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    async: false,
    data: {'json':'{"username":"' + username + '", "password":"' + password + '"}'},
    success: function (result) {
        $('#json').html(result);
    }
})

Подводя итог:

  • API принимает POST только для аутентификации
  • API требует json в качестве данных формы, например: {"username": "myusername", "password": "mypassword"}
  • js запускается издругой домен, вызывая междоменные ошибки

Ваша помощь очень ценится:)

Ответы [ 4 ]

15 голосов
/ 20 июля 2011

Вы должны следовать другой схеме. Ваш локальный JS отправит сообщение ajax на локальный URL, который примет метод POST с вашими данными json.

В этот момент ваш серверный код выполнит HTTP POST с соответствующими данными на удаленном сервере, получит ответ и отправит его обратно вызывающему js.

4 голосов
/ 20 июля 2011

Проблема в том, что домен, к которому вы пытаетесь выполнить POST, не отвечает на запрос OPTIONS, который отправляется перед каждым междоменным запросом. С запросом OPTIONS браузер получает информацию о междоменных правилах и т. Д. Чтобы разрешить междоменный запрос, сервер должен установить Access-Control-Allow-Origin:* (или домен сценария, на самом деле, но * охватывает все) и, возможно, Access-Control-Allow-Methods: GET, POST, OPTIONS заголовки.

2 голосов
/ 02 мая 2013

У меня есть общий хостинг на GoDaddy. Мне тоже нужен был ответ на этот вопрос, и после поиска я обнаружил, что это возможно.

Я написал файл .htaccess, поместил его в ту же папку, что и моя страница действий. Вот содержимое файла .htaccess:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

Вот мой вызов ajax:

    $.ajax({
        url: 'http://www.mydomain.com/myactionpagefolder/gbactionpage.php',  //server script to process data
        type: 'POST',
        xhr: function() {  // custom xhr
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ // check if upload property exists
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
            }
            return myXhr;
        },
        //Ajax events
        beforeSend: beforeSendHandler,
        success: completeHandler,
        error: errorHandler,
        // Form data
        data: formData,
        //Options to tell JQuery not to process data or worry about content-type
        cache: false,
        contentType: false,
        processData: false
    });

См. Эту статью для справки:

Набор заголовков Access-Control-Allow-Origin в .htaccess не работает

0 голосов
/ 20 июля 2011

Для междоменных вещей используйте JSONP (поиск кросс-домена)

http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

...