Ho bisogno di aiuto per trovare un’alternativa all’ajax jQuery sincrono

Ho una forma molto complessa che contiene più tabs. Ogni scheda contiene un’istanza Plupload unica (per il caricamento di più immagini). Il modulo consente all’utente di caricare un “caso” di immagine medica in cui ogni caso è costituito da più “studi” di imaging (ad es. Scansioni TC) e ogni studio contiene più immagini.

Quando l’utente fa clic sul pulsante “invia”, intercetto il clic con jQuery perché devo fare quanto segue:

  1. Controlla i campi richiesti sono inseriti [facile]
  2. Ottieni un numero identificativo univoco dal mio server. Questo numero ID è richiesto da ciascuna istanza di Plupload per sapere su quale directory caricare.

Nella mia funzione chiamata all’invio del modulo ho il seguente frammento di codice:

var case_id; // Code to check the required fields are entered .... // Get the case id number from the server $.get('ajax/unique-case-id').done(function(data){ case_id = data; }); // do something with case_id and other things. MUST happen after the ajax call .... // if there was a problem uploading the images, stop the form from submitting if (problem_occured) { return false; } 

Con la mia logica attuale, ho bisogno che lo script metta in pausa UNTIL che ottenga case_id. Questo era ansible prima di jQuery 1.8 ma $ asaax () async: la proprietà false è stata deprecata.

La mia domanda è duplice:

    1. C’è un modo per mantenere lo script fino a quando non ottengo la richiesta case_id?
    2. Se no, qualche idea su come potrei cambiare la mia logica per aggirare questo?

    Forse ti starai chiedendo perché case_id sia così importante. Le istanze di plupload eseguono il loro caricamento prima che il modulo venga inviato e hanno bisogno di una directory da caricare. Voglio che le immagini vengano caricate per andare in una cartella sul mio server chiamata case_id. Questo permetterà allo script PHP sul server di capire cosa fare con loro una volta che avrà il resto dei dati POSTed.

    Questo è un “problema” molto comune che può essere risolto facilmente usando i callback in modo appropriato.

     $("#submitButton").click(function (event) { event.preventDefault(); //Don't submit the form, we'll submit it manually. var case_id; // Code to check the required fields are entered .... // Get the case id number from the server $.get('ajax/unique-case-id').done(function(data){ case_id = data; // do something with case_id and other things. MUST happen after the ajax call .... // if there was a problem uploading the images, stop the form from submitting if (problem_occured) { alert("something went wrong"); } else { $("#referenceToTheForm").submit(); } }); }); 

    Per farla breve, mantenere il “problema con i problemi o inviare il modulo” all’interno del callback alla chiamata $ .get causerà essenzialmente lo “stop” dello script fino a quando non riavrà indietro i dati. Quindi puoi usare qualcosa come spin.js per dare all’utente una buona esperienza di attesa fino a quando non viene completata.