¿Es posible llamar a una función json en la función de envío?

El siguiente código capturará con éxito la dirección IP de un cliente

var clientIP;
$.getJSON("http://jsonip.appspot.com?callback=?",
function (data) {
    clientIP = data.ip;
});

$("form").submit(function () {
alert(clientIP);
});

Sin embargo, esto captura la dirección IP cuando se carga el formulario. ¿Es posible refactorizar esto para que la función JSON se llame solo cuando el usuario presiona sumbit? p.ej.

$("form").submit(function () {
      var clientIP = <somehow call getJSON function to get client ip>;
alert(clientIP);
});

preguntado el 12 de junio de 12 a las 17:06

¿Qué hay de var? clientIP = $.getJson... Entonces acceda con clientIP.ip ¿o algo así? Aunque no estoy seguro de que eso funcione... -

3 Respuestas

Tienes que esperar respuesta:

$("form").submit(function () {
    $.getJSON("http://jsonip.appspot.com?callback=?",
        function (data) {
            var clientIP = data.ip;
            alert(clientIP);
       });
       // prevent form submission
        return false;
});

Respondido el 12 de junio de 12 a las 17:06

Si no impide el envío de formularios, lo más probable es que no reciba la alerta. - Kevin B

var clientIP;

function getIP(form) {
  $.getJSON("http://jsonip.appspot.com?callback=?",
  function (data) {
    clientIP = data.ip;
    alert(clientIP);
  });
}


$("form").submit(function (e) {
  e.preventDefault(); // prevent default submission
  getIP(this);
});

Nota:

le paso el formulario getIP(), para que pueda enviar el formulario dentro de esa función.

Respondido el 12 de junio de 12 a las 17:06

   var clientIP; // declare it global otherwise you wont be able to use it from outside.
    $("form").submit(function () {
       $.getJSON("http://jsonip.appspot.com?callback=?",
        function (data) {
            clientIP = data.ip;
       });
    return false; // return false so the form doesnt actually submit
    });

Respondido el 12 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.