JavaScript - ¿Cómo realizar petición JSON con JavaScript?

   
Vista:

¿Cómo realizar petición JSON con JavaScript?

Publicado por jose antonio (9 intervenciones) el 19/01/2016 13:09:31
Hola compañeros,
estoy usando la web de polldaddy para realizar unas encuestas y tal y he visto que cuenta con APIs para crear, modificar, eliminar, etc encuestas y evaluaciones.
El problema es que no se muy bien como utilizar dicha API y quería ver si alguien que domine sobre el tema me puede ayudar un poco.
Dispone de dos maneras de realizar peticiones: con XML o con JSON.
Os pongo el link de la pagina donde viene toda la información y un poco de codigo de cada caso.

ENLACE A DOCUMENTACIÓN -------> http://support.polldaddy.com/api/#createpoll

Petición XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8" ?>
<pd:pdRequest xmlns:pd="http://api.polldaddy.com/pdapi.xsd" partnerGUID="3F2504E0-4F89-11D3-9A0C-0305E82C3301">
    <pd:userCode>123456-FErKS5yu15scpSGmvip4JA==</pd:userCode>
    <pd:demands>
        <pd:demand id="CreatePoll">
            <pd:poll>
                <pd:question>Do you like polls?</pd:question>
                <pd:multipleChoice>no</pd:multipleChoice>
                <pd:randomiseAnswers>yes</pd:randomiseAnswers>
                <pd:otherAnswer>yes</pd:otherAnswer>
                <pd:resultsType>percent</pd:resultsType>
                <pd:blockRepeatVotersType>cookie</pd:blockRepeatVotersType>
                <pd:blockExpiration>7257600</pd:blockExpiration>
                <pd:comments>moderate</pd:comments>
                <pd:makePublic>yes</pd:makePublic>
                <pd:closePoll>yes</pd:closePoll>
                <pd:closeDate>2010-05-30T00:42:00</pd:closeDate>
                <pd:styleID>15</pd:styleID>
                <pd:packID>11577</pd:packID>
                <pd:folderID>140644</pd:folderID>
                <pd:languageID>30</pd:languageID>
                <pd:sharing>no</pd:sharing>
                <pd:answers>
                    <pd:answer>
                        <pd:text>Yes</pd:text>
                    </pd:answer>
                    <pd:answer>
                        <pd:text>No</pd:text>
                    </pd:answer>
                </pd:answers>
            </pd:poll>
        </pd:demand>
    </pd:demands>
</pd:pdRequest>

Petición JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
    "pdRequest": {
        "partnerGUID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
        "userCode": "123456-FErKS5yu15scpSGmvip4JA==",
        "demands": {
            "demand": {
                "poll": {
                    "question": "Do you like polls?",
                    "multipleChoice": "no",
                    "randomiseAnswers": "yes",
                    "otherAnswer": {
                        "content": "yes"
                    }, "resultsType": "percent",
                    "blockRepeatVotersType": "cookie",
                    "blockExpiration": "7257600",
                    "comments": {
                        "content": "moderate"
                    }, "makePublic": "yes",
                    "closePoll": "yes",
                    "closeDate": "2010-05-30T00:42:00",
                    "styleID": "15",
                    "packID": "11577",
                    "folderID": "140644",
                    "languageID": "30",
                    "sharing": "no",
                    "answers": {
                        "answer": [{
                            "text": "Yes"
                        }, {
                            "text": "No"
                        }]
                    }
                }, "id": "CreatePoll"
            }
        }
    }
}


Muchísimas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

¿Cómo realizar petición JSON con JavaScript?

Publicado por arck (74 intervenciones) el 19/01/2016 16:09:11
¿Y exactamente que quieres hacer con esto?

Según he visto en una miradita rápida son servicios web.
cada función te indica el dato que le tienes que enviar ya sea por XML o JSON y como te lo devuelve.

Entiendo que te habrás descargado una librería para js, en ella deberías tener las llamadas a los servicios que tienen expuestos.

Me da que lo único que tienes que hacer es componer una variable y llamar a la función que quieras, dicha función te devolverá el response que lo tienes que usar como quieras.

¿Has usado alguna vez objetos JSON en javascript? digo objetos JSON porque XML me parece mas complicado en JS.

¿La API es en JAVASCRIPT? ¿no hay una en JAVA o PHP o algún lenguaje servidor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo realizar petición JSON con JavaScript?

Publicado por jose antonio (9 intervenciones) el 19/01/2016 16:24:04
Hola gracias por responder.
Lo que quiero hacer es poder crear una encuesta con esa API que dispone Polldaddy pero no se muy bien como usarla en JavaScript.
He usado muy poco AJAX y JSON casi nada y no consigo incrustarlo bien.
He metido esto en un html en un document ready pero no se si está correcto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<body>
 
		<div id="id01"></div>
		<section id="resultados"> </section>
		<section id="respuesta"></section>
	</body>
 
<script>
		$(document).ready(function() {
		/*evento.preventDefault();*/
 
		$.ajax({
		  url: 'https://api.polldaddy.com/',
		  data: {
    "pdRequest": {
        "partnerGUID": "aqui pongo mi id",
        "userCode": "MI USER CODE",
        "demands": {
            "demand": {
                "poll": {
                    "question": "Do you like polls?",
                    "multipleChoice": "no",
                    "randomiseAnswers": "yes",
                    "otherAnswer": {
                        "content": "yes"
                    }, "resultsType": "percent",
                    "blockRepeatVotersType": "cookie",
                    "blockExpiration": "7257600",
                    "comments": {
                        "content": "moderate"
                    }, "makePublic": "yes",
                    "closePoll": "yes",
                    "closeDate": "2010-05-30T00:42:00",
                    "styleID": "15",
                    "packID": "11577",
                    "folderID": "140644",
                    "languageID": "30",
                    "sharing": "no",
                    "answers": {
                        "answer": [{
                            "text": "Yes"
                        }, {
                            "text": "No"
                        }]
                    }
                }, "id": "CreatePoll"
            }
        }
    }
},
		  type: 'POST',
		  dataType: 'jsonp',
		  success: function(datos) {
			alert('success');
			$('#resultados').text(JSONP.stringify(datos, null, 4));
			$('#respuesta').text(datos.respuesta).fadeIn('slow');
		  }
		});
		});
		</script>

Muchisimas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo realizar petición JSON con JavaScript?

Publicado por arck (74 intervenciones) el 19/01/2016 17:59:27
genera el dato fuera de la función, haz un console.log() y después en el la llamada a ajax pon data: el dato, de esta forma puedes ver la formación del dato.

También puedes usar soapUI para hacer pruebas de las llamadas a los servicios, coge el dato ese y prueba a llamar al end point con es dato.

Pero como he dicho antes me parece rarísimo que esto se haga en JS, porque supongo que el partnerGUID y userCode son únicos para cada usuario ¿no?

Es lo que me chirría.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jordi

¿Cómo realizar petición JSON con JavaScript?

Publicado por Jordi (75 intervenciones) el 19/01/2016 16:15:44
Hola José Antonio,

Muy sencillo. Primero tienes que componer tu objeto JSON a enviar:

1
2
3
4
var peticion = {};
peticion.pdRequest = {};
peticion.pdRequest.partnerGUID = ...
...

Una vez tienes tu objeto a enviar en una variable, por ajax lo envías. Con JQuery es así de sencillo:

1
2
3
4
5
6
7
8
9
10
11
$.ajax({
    url: 'url_api/metodo_api',
    async: false,   // hacemos la petición síncrona
    data: peticion  // le pasamos como dato el objeto json creado,
    done: function (jqXHR, textStatus ) {
            // A hacer cuando te llegue la respuesta OK
    },
    error: function (jqXHR, textStatus, errorThrown ) {
           // A hacer si te llega un error
   }
});
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

¿Cómo realizar petición JSON con JavaScript?

Publicado por arck (74 intervenciones) el 19/01/2016 16:23:03
Seguramente me columpie pero no se porque creo que no deberia ir en javascript, es raro que el XML o el JSON tengan un userCode, si generar la request en js todo el mundo vería ese userCode.

Y habiendo distribuciones de pago de esta libreria ........ me parece raro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

¿Cómo realizar petición JSON con JavaScript?

Publicado por Vainas (239 intervenciones) el 19/01/2016 19:17:19
arck Tienes razon en lo de que no se deberia acceder mediante ajax. Ya lo pone tambien la propia web:

You cannot access the API directly using Javascript AJAX requests in a browser. The browser must send a request (AJAX or otherwise) to the originating host of the page. The server then sends a request to api.polldaddy.com and waits for a reply before sending data to the browser.

All requests should be sent to https://api.polldaddy.com/

No debes acceder directamente con ajax desde un navegador. en todo caso debe ser un lenguaje en un servidor el que haga las llamadas y desvuelva al navegador los mismos.

Lo dice en la zona de Authentication: http://support.polldaddy.com/api/#authentication

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo realizar petición JSON con JavaScript?

Publicado por arck (74 intervenciones) el 20/01/2016 08:48:08
Buenos pues hasta aquí mi aporte, si quieres que te diga como hacerlo en java, te lo enseño en un momento pero js reitero el NO se pone en el cliente, a ver si me lee y se entera.

Gracias por tu apoyo Vainas.

Cuando lo haga y le roben la cuenta ya se echara a reir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar

¿Cómo realizar petición JSON con JavaScript?

Publicado por jose antonio (9 intervenciones) el 19/01/2016 16:33:10
Hola Jordi,

algo mas sencillo.
Sencillamente quiero devolver mi cuenta con una funcion que tiene polldaddy. Es este código el que me proporcionan:
1
2
3
4
5
6
7
8
9
10
11
{
    "pdRequest": {
        "partnerGUID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
        "userCode": "123456-FErKS5yu15scpSGmvip4JA==",
        "demands": {
            "demand": {
                "id": "GetAccount"
            }
        }
    }
}

¿Cómo haría para componer el array JSON tal como me has indicado anteriormente? Porque cuando llego a demands ya me pierdo.
Lo que he hecho es lo siquiente:
1
2
3
4
5
6
7
8
9
$(document).ready(function() {
			var peticion = {};
			peticion.pdRequest = {};
			peticion.pdRequest.partnerGUID = "GUID";
			peticion.pdRequest.userCode = "0";
			peticion.pdRequest.demands = {};
			peticion.pdRequests.demands.demand
 
		});

Y ya no se seguir construyendo la peticion.

Gracias y disculpa las molestias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jordi

¿Cómo realizar petición JSON con JavaScript?

Publicado por Jordi (75 intervenciones) el 19/01/2016 17:24:13
Hola Jose Antonio,

Sería de la siguiente forma:

1
2
3
4
5
6
7
8
$(document).ready(function() {
			var peticion = {};
			peticion.pdRequest = {};
			peticion.pdRequest.partnerGUID = "GUID";
			peticion.pdRequest.userCode = "0";
			peticion.pdRequest.demands = {};
			peticion.pdRequests.demands.demand = { id: "GetAccount"};
		});

De todas formas, para no liarte, también lo puedes hacer de golpe, construyéndolo tal cual. Imagínate que tienes el JSON que me has puesto ahora. Podrías construirlo sencillamente así:

1
2
3
4
5
6
7
8
9
10
11
var json = {
    "pdRequest": {
        "partnerGUID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
        "userCode": "123456-FErKS5yu15scpSGmvip4JA==",
        "demands": {
            "demand": {
                "id": "GetAccount"
            }
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Vainas

¿Cómo realizar petición JSON con JavaScript?

Publicado por Vainas (239 intervenciones) el 19/01/2016 19:12:10
done no va dentro de las opciones del ajax es una funcion externa, en todo caso ese done tendria que ser success

referencia: http://api.jquery.com/jquery.ajax/

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

¿Cómo realizar petición JSON con JavaScript?

Publicado por Vainas (239 intervenciones) el 19/01/2016 19:07:05
Buenas:

Voy a empezar de abajo hacia arriba que parece que ya se han llegado a varias conclusiones.

1. Crea tu objeto primero en plano como recomienda Jordi:

1
2
3
4
5
6
7
8
9
10
11
var obj_json = {
    "pdRequest": {
        "partnerGUID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
        "userCode": "123456-FErKS5yu15scpSGmvip4JA==",
        "demands": {
            "demand": {
                "id": "GetAccount"
            }
        }
    }
}

Atencion que esto es un objeto javascript no un json...

Luego seguimos las indicaciones de la web:

The HTTP POST request also must set the content type to “application/json.”

asi que nos guardamos esto para colocar en el ajax:

1
contentType: "application/json; charset=utf-8"

He visto que pones:

1
dataType: 'jsonp'

no es necesario ya que jQuery sabe que el dato que viene es un json, y sino pones json, no jsonp.

Como he dicho anteriormente lo de arriba era un objeto javascript para pasarlo a json que es un "texto" de un determinado formato lo hacemos con "JSON.stringify" y en el ajax queda asi:

1
data: JSON.stringify(obj_json),

Y yo creo que si juntas todo esto tienes que obtener algo.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo realizar petición JSON con JavaScript?

Publicado por jose antonio (9 intervenciones) el 25/01/2016 17:40:10
Hola compañeros siento la tardanza en contestar.
Primero agradeceros a todos el esfuerzo por ayudarme.
Después de varios dias pegandome con jquery y tal he decidido instalarme un servidor local de php.
Decir que tengo bastantes conocimientos de PHP pero nunca he implementado el uso de APIs y para mi este tema me queda un poco grande.
¿Alguien podría ayudarme para poder implementar el metodo de crear una encuesta de polldaddy con php y JSON?

Muchisimas gracias y saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar