2012-07-26 15 views
5

Esto es lo que he intentado taaan lejos ..Bugzilla - servicio web a través de 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> 

lectura sobre esta JSONPRC, no conseguir lejos.

Cuando hago clic en el botón - hacer una llamada, para iniciar sesión/hacer nada para el caso - me sale el siguiente error -

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. 

Desde mi entender, "Access-Control-Allow-Origen" es causado por el problema de "la misma política de origen" y, por lo tanto, debería usar "jsonp". Pero, Jsonp - es decir, la inyección de scripts solo se puede hacer a través de la solicitud GET. Sin embargo, si intento el mismo script JS con una petición GET - Me sale el siguiente:

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

confundido acerca de cómo conectar/inicio de sesión a través de los servicios web, que estoy haciendo algo tonto claramente algo mal aquí mayormente .. sería una gran ayuda si alguien puede ayudar a conectar y buscar el fallo details.I've estado en él desde 8-10 días ahora .. :(

FYI:

  • hago no tener acceso al servidor

  • Estoy en una instalación de cliente y servidor de acceso a Bugzilla

Otros enlaces,

Ajax Call

Loggin In

BugzillaApc

Google Groups - Live conversation

Respuesta

5

Debe utilizar los parámetros Bugzilla_login y Bugzilla_password para autenticar cada llamada, que será GET usando jsonp. Su llamada se verá como la siguiente, utilizando User.get como ejemplo:

// 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", 
    ... 

Tienes que hacerlo de esta manera debido a que:

  • Usted va a hacer una llamada entre dominios
  • Debido a que usted no se puede establecer cosas como Access-Control-Allow-Origin vas a tener que hacerlo a través de jsonp (o proxy, pero es más simple jsonp)
  • jsonp es necesariamente una solicitud GET, no POST

Los documentos relevantes:

+0

si intento el fragmento de código anterior, es decir. Raw 'myObject' para jQuery procesar - obtengo el error =>' código: 32000 mensaje: "No se pudo analizar el argumento 'params' como JSON válido. Error: cadena JSON malformada, ni matriz, objeto, número, cadena o átomo, en el carácter desplazamiento 1 (antes de "Objeto objeto") en Bugzilla/WebService/Server/JSONRPC.pm línea 169. Valor: [object Object] "', Pero la cadena json que he dado es según el método prescrito . Si incluyo el método 'toJson' antes de enviar - obtengo' por favor incluya un método antes de enviar una solicitud'' aparece el error .. –

+0

@VivekChandra ¡Uy, codificado eso demasiado rápido, por favor vea la actualización que debería tener todo el codificaciones correctas en los lugares correctos. – blahdiblah

+0

Funcionó ... :) .. gracias un millón, pero tiene una pequeña pregunta - en el [__Doc__] (http://www.bugzilla.org/docs/4.2/en/html/api/Bugzilla/WebService.html #CALLING_METHODS) ¡dice que incluso una matriz es aceptada !, entonces ¿por qué se acepta la cadena y no cuando params es una matriz? .. –

Cuestiones relacionadas