2010-04-22 6 views
1

J'utilise le code suivant pour obtenir des données JSON:Linux Ajax (Mootools Request.JSON) erreur en-tête

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

Request.JSON est une classe de Mootools (une librairie javascript). Mais sur linux (ubuntu sur firefox 3.5 et Chrome) la requête échoue systématiquement. J'ai donc essayé d'afficher la requête http que l'ajax envoie. (j'ai utilisé netcat pour l'afficher)

La demande est comme ceci:

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 

La requête HTTP (première ligne) n'est pas comment il devrait être:

OPTIONS /the+url HTTP/1.1 

Il devrait être :

GET /the+url HTTP/1.1 

est-ce que quelqu'un sait pourquoi ce problème et comment le résoudre?

Edit:

La demande ajax obtient le résultat suivant de mon serveur 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 

La longueur de contenu ne doit pas être nul. Mais je pense que le module Request.JSON devrait maintenant voir que la requête GET est disponible et peut l'utiliser?

Répondre

2

Cela peut être lié à la spécification W3C Cross-Origin Resource Sharing.

+0

Je l'ai réparé, merci! En apache j'ai activé les mod_headers et ajouté un fichier config dans conf.d qui dit: Header set Access-Control-Access-Origine "*" Cette ligne accepte toutes les requêtes de tous les domaines (quelque chose comme le fichier crossdomain.xml pour flash). – VDVLeon

0

Je ne sais pas pourquoi l'en-tête de demande changerait, mais les classes de demande offrent plus de fonctionnalités pour envoyer une demande. Essayez send() au lieu de get();

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

ou de le lier à la demande en même temps;

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