JQuery JSON делает запрос OPTIONS, несмотря на установку GET - PullRequest
1 голос
/ 09 сентября 2010

У меня странная проблема в Windows при использовании любого браузера. Когда я делаю запрос с моего локального компьютера на внешний сайт с файлом JSON. Apache получает запрос OPTIONS, а не GET, несмотря на указание GET. Однако после некоторых исследований это выглядит как проблема межсайтовых запросов: большинство статей, которые я обнаружил, были исправлены. Кто-нибудь имеет представление о том, почему это происходит и как это можно решить.

Спасибо

$.ajax({
 type: 'GET',
 url: http://mywebsite.com/getjsn.json,
 dataType: "json",
 cache: false,
 success: function(data, textStatus, XMLHttpRequest) {
  // do something.
 },
 error: function(XMLHttpRequest, textStatus, errorThrown) {
  // deal with error.
 },
 complete: function(XMLHttpRequest, textStatus) {
  // all done.
 }
});

Asdasd

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Я предлагаю вам взглянуть на http://api.jquery.com/jQuery.ajax/, специально в отношении транзакций JSONP. Когда вы загружаете JSON с внешнего сайта, вы должны структурировать свой запрос по-другому. Скорее всего, вам придется настроить свой сервер, чтобы приспособиться к этому. Конечный вызов будет выглядеть примерно так.

$.ajax({
    url: 'http://mywebsite.com/getjson.json?callback=?',
    dataType: 'jsonp',
    success: function(data) {
        // do something.
    }
});

Что касается самого запроса «OPTIONS», я полагаю, что это объяснено в developer.mozilla.org/En/HTTP_access_control. Я предполагаю, что Джеймс использует современный браузер, и этот браузер пытается спросить целевой сервер, должен ли запрос быть разрешен. Это поддерживается не во всех браузерах, поэтому я все же предлагаю мое предыдущее решение.

0 голосов
/ 30 сентября 2013

Запрос параметров выполняется браузером в качестве защиты от межсайтовых скриптовых атак.Javascript не знает, что это когда-либо случится, это делает браузер.Вам нужно, чтобы ваш сервер возвращал правильные заголовки контроля доступа, если ваш запрос поступил из другого домена.Если запрос get поступает из того же домена, вы никогда не увидите запрос параметров.

Для сайтов, на которых все идет через index.php, сначала будет работать нечто подобное этому:

if (PHP_SAPI != 'cli'){
    $allowed = array('http://domainyouwantthebrowertobeabletocomefrom.com', 'http://blabla.com');
    if (isset($_SERVER['HTTP_ORIGIN'])){
        if (in_array($_SERVER['HTTP_ORIGIN'], $allowed) OR substr($_SERVER['HTTP_ORIGIN'], -11) == 'netmark.dev'){
            header( "Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}" );
            header( "Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS" );
            header( 'Access-Control-Allow-Headers: accept, stamp, signature, x-requested-with, origin, content-type' );
            header( 'Access-Control-Allow-Credentials: true' );
            header( 'Access-Control-Max-Age: 300' );
        }
    }
    if (strtoupper($_SERVER['REQUEST_METHOD']) == 'OPTIONS') {
        exit;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...