Question

Je suis en train d'essayer d'accéder à certaines données via JSON-RPC à l'aide de la trac XMLRPCPlugin en utilisant ma propre méthode "branché" dans un de ses points d'extension sur le côté serveur et un JQuery AJAX demande sur le côté client.Je peux accéder aux données de l'amende à l'aide de Firefox affiche extension cependant, l'utilisation de l'ajax de JQuery demande donne un message d'erreur.Le message d'erreur que je reçois est:

Trac[web_ui] DEBUG: RPC incoming request of content type 'application/json' dispatched 
to <tracrpc.json_rpc.JsonRpcProtocol object at 0x03CA51F0>
Trac[web_ui] DEBUG: RPC(JSON-RPC) call by 'PaulWilding'
Trac[json_rpc] ERROR: RPC(json) decode error 
Traceback (most recent call last):
  File "build\bdist.win32\egg\tracrpc\json_rpc.py", line 148, in parse_rpc_request
    data = json.load(req, cls=TracRpcJSONDecoder)
  File "C:\Python27\Lib\json\__init__.py", line 278, in load
    **kw)
  File "C:\Python27\Lib\json\__init__.py", line 339, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "build\bdist.win32\egg\tracrpc\json_rpc.py", line 99, in decode
    obj = json.JSONDecoder.decode(self, obj, *args, **kwargs)
  File "C:\Python27\Lib\json\decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\Lib\json\decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Trac[web_ui] ERROR: RPC(JSON-RPC) Error
Traceback (most recent call last):
  File "build\bdist.win32\egg\tracrpc\web_ui.py", line 143, in _rpc_process
    rpcreq = req.rpc = protocol.parse_rpc_request(req, content_type)
  File "build\bdist.win32\egg\tracrpc\json_rpc.py", line 162, in parse_rpc_request
    raise JsonProtocolException(e, -32700)
JsonProtocolException: No JSON object could be decoded
Trac[json_rpc] DEBUG: RPC(json) encoded response: {"error": {"message": "JsonProtocolException details : No JSON object could be decoded", "code": -32700, "name": "JSONRPCError"}, "result": null, "id": null}

Le JQuery demande est:

 url: "http://localhost/Projects/jsonrpc",
   contentType: "application/json",
   dataType: "jsonp",
   data: {"method": "breq.getBreqs"},
   type: 'POST',
   success: function (repsonse) {
          alert("success");
   },
   error: function (jqXHR, textStatus, errorThrown) {
          alert("Error: " + textStatus);
   }      

La demande que j'ai obtenu de travail par le biais de l'Affiche est tout simplement “{"méthode":"breq.getBreqs"}” avec le contenu de l'application/json et l'URL le même que ci-dessus.

J'ai lu quelques posts sur ce problème lorsqu'il est utilisé avec un proxy PHP et essayé de journalisation de la demande dans le parse_rpc_request dans le trac rpc plugin, mais cela n'a retourné la même chaîne de “” à la fois pour le travail et non-travail demandes.

Je ne pense pas que cela soit du à un problème de Javascript de Même Origine que la demande est à mon trac banc d'essai qui est sur ma machine.Cependant, une fois que le plugin est déployé sur un serveur encore à l'intérieur du réseau principal sera-ce devenir un problème, et si oui, comment dois-je traiter avec elle?

Si le problème n'est pas de le faire avec la Même Origine personne ne sait ce qui en est la cause?

Était-ce utile?

La solution

Votre appel sera encoder l'entrée, qui n'est pas ce que vous voulez de JSON-RPC.Vous voulez que le corps de la requête à une chaîne JSON sans ajout de personnages ou de l'information.

Voici une nouvelle version de votre extrait de code qui charge très bien à partir d'un navigateur javascript console, mais remarque que mon exemple des appels system.listMethods (et pas de votre méthode personnalisée) pour qu'il fonctionne pour tout Trac RPC de l'installation:

$.ajax({
   url: "http://localhost/trac/rpc",
   contentType: "application/json",
   dataType: "text",
   data: JSON.stringify({method: "system.listMethods", id: 42}),
   type: 'POST',
   success: function (response) {
       incoming = JSON.parse(response)
       alert("Result ID " + incoming["id"] + ": " + incoming["result"]);
   },
   error: function (jqXHR, textStatus, errorThrown) {
       alert("Error: " + textStatus);
   }
});

Utilisation /login/rpc URL à moins que anonymous avez attribué XML_RPC la permission.

Autres conseils

Le problème peut être dans ce que vous envoyez en réalité en tant que paramètre:

data: {"method": "breq.getBreqs"}

Essayez la solution décrite ici: JQuery Ajax Posting Json à Webservice

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top