Ошибка заголовка Linux Ajax (mootools Request.JSON)

Я использую следующий код для получения данных json:

var request = new Request.JSON(
    {
        'url':        sourceURI,
        'onSuccess':  onPageData
    }
);
request.get();

Request.JSON — это класс из Mootools (библиотека javascript).

Но в linux (ubuntu в firefox 3.5 и Chrome) запрос всегда терпит неудачу. Итак, я попытался отобразить HTTP-запрос, который отправляет ajax. (Я использовал netcat для отображения)

Запрос такой:

OPTIONS /the+url HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.226.0 Safari/532.3
Referer: http://example.com/ref...
Access-Control-Request-Method: GET
Origin: http://example.com
Access-Control-Request-Headers: X-Request, X-Requested-With, Accept
Accept: */*
Accept-Encoding: gzip,deflate
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

HTTP-запрос (первая строка) не такой, каким должен быть:

OPTIONS /the+url HTTP/1.1

Должен быть:

GET /the+url HTTP/1.1

Кто-нибудь знает, почему эта проблема и как ее исправить?

Редактировать:

Запрос ajax получает следующий результат от моего сервера Apache:

HTTP/1.1 200 OK
Date: Fri, 23 Apr 2010 08:09:41 GMT
Server: Apache/2.2.15 (Debian)
Allow: GET,HEAD,POST,OPTIONS
Content-Length: 0
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/plain

Длина содержимого не должна быть равна нулю. Но я думаю, что модуль Request.JSON теперь увидит, что запрос GET доступен, и сможет его использовать?


person VDVLeon    schedule 22.04.2010    source источник


Ответы (2)


Это может быть связано с W3C Cross-Original Совместное использование ресурсов спец.

person Julian Reschke    schedule 22.04.2010
comment
Я исправил это, спасибо! В apache я включил mod_headers и добавил файл конфигурации в conf.d, в котором говорится: Заголовок set Access-Control-Access-Origin * Эта строка принимает все запросы со всех доменов (что-то вроде crossdomain.xml для flash). - person VDVLeon; 23.04.2010

Я понятия не имею, почему заголовок запроса изменился, но классы Request предлагают больше возможностей для отправки запроса. Попробуйте отправить() вместо get();

var req = neq Request.JSON({...});
req.send({
    'method': 'get'
});

Или сразу привязать к Запросу;

var req = new Request.JSON({
    method: 'get',
    ...
}).send();
person Björn    schedule 22.04.2010