2015-09-09 1 views
0

Эта скрипка отлично работает в Chrome, но не в Firefox: http://jsfiddle.net/u5pugnbn/CORS запрос не будет работать в Firefox, работает в Chrome и Safari

index.html

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
    <input type="button" value="Get Data" onclick="getData()"/> 
    <h1 id="output"></h1> 
    </body> 

    <script src ="main.js"></script> 
</html> 

main.js

var API_URL = "http://andr3w321.pythonanywhere.com"; 

function getData() { 
    var output = document.getElementById('output'); 
    var xhr = new XMLHttpRequest(); 
    var url = API_URL + "/hello"; 
    xhr.open("GET", url, true); 
    xhr.onload = function (e) { 
    if (xhr.readyState === 4) { 
     if (xhr.status === 200) { 
     output.innerHTML = xhr.responseText; 
     } else { 
     output.innerHTML = "Error: " + xhr.statusText; 
     } 
    } 
    }; 
    xhr.onerror = function (e) { 
    output.innerHTML = "Error: " + xhr.statusText; 
    }; 
    xhr.send(); 
} 
файловый сервер бутылка

Python

from bottle import default_app, route, run, template, static_file, url, get, redirect, response, request 

# allow requests from other domains 
def enable_cors(fn): 
    def _enable_cors(*args, **kwargs): 
     # set CORS headers 
     response.headers['Access-Control-Allow-Origin'] = '*' 
     response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, OPTIONS' 
     response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token' 

     if request.method != 'OPTIONS': 
      # actual request; reply with the actual response 
      return fn(*args, **kwargs) 

    return _enable_cors 


@route('/hello', method=['OPTIONS', 'GET']) 
@enable_cors 
def hello(): 
    return "hello" 

application = default_app() 

Загрузка статического index.html в домен и изменение Allow-Origin от * к определенному домену, похоже, не помогло.

+0

Кажется, все в порядке. Каков предполагаемый результат? –

+0

Заголовок h1 должен заполняться «привет», если запрос завершается успешно. Hmmm Я запускаю последний firefox 40.0.3 и только что обновлен от 39. Не уверен, что это повлияло. Как я уже сказал, это работает в Chromium для меня просто отлично, но не firefox. Это дало ошибку в консоли как зависание на 'xhr.open (« GET », url, true);' line. – user1071182

+0

работает в 40.0.3 (окна) и 42.0, если на то пошло –

ответ

1

Оказывается, секретный барьер блокировал запрос. После того как я отключил его после посещения index.html, он отлично работает.

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