2012-07-26 14 views
5

Ecco quello che ho provato soo lontano ..Bugzilla - webservice tramite JSON-RPC

<html> 
    <head> 
    <title>bugstats.com</title> 
    </head> 
<script type="text/javascript"  src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript" src="http://jquery-json.googlecode.com/files/jquery.json- 1.3.min.js"></script> 
<script type="text/javascript" > 
function hello(){ 
var myObject = {"method":"User.login", /* is this the right method to call? */ 
"params":[ { "login" :"user", /*should i include the login credentials here? */ 
"password" : "pass123" , 
"remember" : "True"} ] }; 
var enc = $.toJSON(myObject); 

$.ajax({"contentType":"application/json", 
    "data": enc, 
    "crossDomain":"true", 
    "dataType": "json", 
    "url": "https://bugzilla.company.com/bugzilla/jsonrpc.cgi", /* is this correct or should it be https://bugzilla.company.com/bugzilla/jsonrpc.cgi?method=User.login? */ 
    "type": "POST", 
    success: function(){ 
      alert("Hallelujah"); 
       console.log(arguments); 

      }, 
    error: function() { 
    alert("Failed") 
    } 

    }); 
} 
function parseResponse(obj){ 
alert("Success") 
console.log(obj) 
} 
</script> 
    <body> 
    <h1>bugzilla.com</h1> 
    <input type="button" onclick="hello()" value="Click"> 
</body> 

lettura su questo JSONPRC, non ricevendo più lontano.

Quando fa clic sul pulsante - effettuare una chiamata, il login/fare qualsiasi cosa per quella materia - ottengo il seguente errore -

OPTIONS https://bugzilla.company.com/bugzilla/jsonrpc.cgi 403 (Forbidden) jquery.min.js:19 
XMLHttpRequest cannot load https://bugzilla.company.com/bugzilla/jsonrpc.cgi. Origin http://172.16.229.137 is not allowed by Access-Control-Allow-Origin. 

Dalla mia comprensione, "Access-Control-Allow-Origin" è causato a causa del problema "stessa politica di origine" e quindi dovrei usare "jsonp". Ma, JSONP - i.e, l'iniezione di script può essere eseguita solo tramite la richiesta GET. Ma, se provo lo stesso script JS con una richiesta GET - ottengo il seguente:

code: 32610 
message: "For security reasons, you must use HTTP POST to call the 'User.login' method." 

confuso su come collegare/login tramite i servizi Web, sto chiaramente facendo qualcosa di stupido qualcosa niente male qui .. sarebbe un grande aiuto se qualcuno può aiutarmi a connettersi e prendere il details.I've bug stato esso dal 8-10 giorni ora .. :(

FYI:

  • faccio non avere accesso al server

  • Sono su una configurazione client e che accedono al server Bugzilla

Altri link,

Ajax Call

Loggin In

BugzillaApc

Google Groups - Live conversation

risposta

5

È necessario utilizzare i parametri Bugzilla_login e Bugzilla_password per autenticare ogni chiamata, che sarà GET utilizzando jsonp. La chiamata sarà simile a quanto segue, utilizzando User.get come esempio:

// Method parameters 
var params = [{ 
    /* The authentication parameters */ 
    "Bugzilla_login": "YourUserName", 
    "Bugzilla_password": "YourPassword", 
    /* The actual method parameters */ 
    "ids": [1, 2] 
}]; 
var myObject = { 
    "method": "User.get", 
    "params": JSON.stringify(params) 
}; 

$.ajax({"contentType": "application/json", 
    "data": myObject, /* jQuery will handle URI encoding */ 
    "crossDomain": "true", 
    "dataType": "jsonp", /* jQuery will handle adding the 'callback' parameter */ 
    "url": "https://bugzilla.company.com/bugzilla/jsonrpc.cgi", 
    "type": "GET", 
    ... 

Bisogna fare in questo modo, perché:

  • Si farà una chiamata cross-domain
  • Perché tu non è possibile impostare le cose come Access-Control-Allow-Origin dovrete farlo via jsonp (o proxy, ma jsonp è più semplice)
  • jsonp è necessariamente una richiesta GET, non POST

La documentazione in materia:

+0

Se provo il frammento di codice di cui sopra, vale a dire. Raw 'myObject' per jQuery da elaborare - ottengo l'errore =>' codice: 32000 messaggio: "Impossibile analizzare l'argomento 'params' come JSON valido. Errore: stringa JSON non valida, né array, oggetto, numero, stringa o atom, con carattere offset 1 (prima di "oggetto Object") a Bugzilla/WebService/Server/JSONRPC.pm riga 169. Valore: [oggetto Object] "', Ma la stringa json che ho dato è come da metodo prescritto . Se includo il metodo 'toJson' prima di inviare - ricevo' per favore includi un metodo prima di inviare una richiesta ', si presenta un errore .. –

+0

@VivekChandra Oops, codificato un po' troppo veloce, per favore vedi l'aggiornamento che dovrebbe avere tutte le codifiche giuste nei posti giusti. – blahdiblah

+0

Ha funzionato .. :) .. grazie mille, ma ho una piccola domanda - nel [__Doc__] (http://www.bugzilla.org/docs/4.2/en/html/api/Bugzilla/WebService.html #CALLING_METHODS) dice che anche un array è accettato !, quindi perché la stringa viene accettata e non quando params era un array ??. –