OBJETIVO: Lo que yo busco es obtener datos de la base de datos y actualizar main.php (más evidente a través de draw_polygon) cada vez que algo se agrega en la base de datos (después de $.ajax submit_to_db.php).

Así que, básicamente, tengo un main.php que se ajax llamar a otro php para recibir una matriz que será guardado en la base de datos, y un json llamar a otro php que devuelve un array será utilizado por main.php.

$(document).ready(function() {
    get_from_db();
    $('#button_cancel').click(function(){
       $.ajax({
          url: 'submit_to_db.php',
          type: 'POST',
          data: {list_item: selected_from_list},

          success: function(result){
             ...
             get_from_db();
          }
       });
    });
    function get_from_db(){
         $.getJSON('get_from_db.php', function(data) {
             ...
             draw_polygon(data);
         });
    }
 });

En mi caso, yo lo que hice fue un get_from_db llamada de función para getJSON para conseguir realmente en la base de datos, con los datos que se utilizan para draw_polygon. Pero es que la forma en que se debe de hacer? Soy un completo novato y este es mi primera vez para tratar getJSON y ajax demasiado para ser honesto. Así que mi pregunta: ¿Cómo asincrónica trabajo realmente? Hay otra solución para esto en lugar de tener que llamar a la función get_from_db con getJSON (no es sincrónico, es? es que ¿por qué no actualizar la página cuando no está dentro de una función?) Todo el tiempo – como $.ajax con async: false (yo no podía llegar a trabajar por el camino). Mi enfoque está trabajando, pero pensé que tal vez hay otras maneras mejores de hacerlo. Me encantaría aprender. Gracias de antemano. Espero que estoy haciendo ningún sentido.

Para hacerlo más claro, aquí es lo que quiero lograr:

  1. @start de la página, obtener datos de la base de datos (en la actualidad a través de getJSON)
  2. Pintar o dibujar en canvas el uso de la data
  3. Cuando hago clic en el botón hecho para actualizar la base de datos
  4. Quiero obtener de forma AUTOMÁTICA los datos de nuevo para volver a pintar los cambios en el lienzo.
InformationsquelleAutor Fred | 2012-10-22

4 Comentarios

  1. 22

    Asynchronusly significa que la Petición se ejecuta en segundo plano, y se llama a la función de la espalda cuando se tiene una respuesta. Este método es mejor si usted quiere tener un resultado, pero permite el uso de su aplicación dentro de la solicitud. Si usted quiere tener una respuesta directa, echa un vistazo a un synchron solicitud. esta solicitud se pausa la ejecución del script hasta que llegó una respuesta, y el usuario no puede hacer nada hasta que la respuesta ha sido recibido. Usted puede conmutar a través de:

    async: false,

    Así, por ejemplo:

    $.ajax({
        url: "myurl",
        async: false,
        ...
    })
    • Me podría poner async: false con $.getJSON(‘get_from_db.php’, function(data) { … }); ? Lo que es más importante, ¿ de sincronización significa que vaya a reanudar (el que dicen que hace una pausa) cuando hay un cambio en la base de datos getJSON se accede?
    • sí, esto debería funcionar. La función se llama directamente, no después de un retraso.
    • También tengo que cambiar la coma a coma, entonces? $.getJSON(‘get_from_db.php’, function(data) { async: false }); no funciona. EDIT: no funciona con semi-colon también – async: false;
    • sí, porque tiene que ser { async: false } 🙂 en las Opciones de la última opción no debe haber una coma detrás.
    • Sí, no hay ningún error ahora. Pero tal vez es sólo que la sincronización o async:false no es la forma en que yo entiendo que sea. Gracias por la ayuda. Async: false no me deja conseguir lo que quiero, pero al menos he aprendido algo nuevo.jeje
    • Eso es una cosa buena también 😛
    • Por favor, mostrar donde se agrega el parámetro async: false o mostrar un ejemplo.

  2. 49

    Desde $.getJSON() utiliza ajax configuraciones, acaba de establecer el mundial de ajax configs:

    //Set the global configs to synchronous 
    $.ajaxSetup({
        async: false
    });
    
    //Your $.getJSON() request is now synchronous...
    
    //Set the global configs back to asynchronous 
    $.ajaxSetup({
        async: true
    });
    • Gran solución, rally encanta esto! Gracias asignar, como este se define y se desactiva la variable y no deja de Ajax en el modo asíncrono. Funciona estupendamente!
    • Yo no los uso a nivel mundial-config-método para evitar la unpredictive comportamiento. Cita de jQuery docs: «recomendamos fuertemente contra el uso de este API. En su lugar, establezca las opciones explícitamente en la convocatoria o definir un simple plugin para hacerlo». Ver a mi respuesta cómo hacer esto.
    • lo mejor es utilizar todos ajax comandos de forma asincrónica. (Que es lo que el a en ajax se encuentra, después de todo.) Pero el hecho de que la pregunta fue hecha, y varias personas han encontrado útil, significa que hay algunos casos en los que este es el comportamiento deseable…
    • «lo mejor es utilizar todos ajax comandos de forma asincrónica»; es por eso que yo, sin embargo, una advertencia / aviso de información estaría en su lugar.
  3. 19

    $.getJSON(), no aceptar una configuración, como se dice en el docs es una versión corta de:

    $.ajax({
      dataType: "json",
      url: url,
      data: data,
      success: success
    });

    Así que acaba de escribir su solicitud en términos de que y async:false funcionará como se espera.

  4. 11

    $.getJSON() es una notación abreviada para $.ajax() que puede ser configurado para ser sincrónica (ver jQuery.getJSON y JQuery.ajax):

    $.ajax({
      dataType: "json",
      url: url,
      data: data,
      async: false, 
      success: function(data) {
          ...
          draw_polygon(data);
      }
    });

    Intentar evitar llamadas sincrónicas aunque. Cita de jQuery doc (ver async prop):

    Cruz-dominio de las solicitudes y el tipo de datos: «jsonp de solicitudes de» no apoyo
    el funcionamiento síncrono. Tenga en cuenta que las solicitudes sincrónicas pueden temporalmente
    bloquear el navegador, deshabilitar cualquiera de las acciones mientras la solicitud esté activo.

    Es posible que desee probar jQuery Deferreds como este:

    var jqxhr = $.getJSON(url);
    jqxhr.done(function(data) {
        ...
        draw_polygon(data);
    });

Dejar respuesta

Please enter your comment!
Please enter your name here