Ho un plugin che funziona come un POST standard ma non come una richiesta AJAX POST.

Ricevo un errore non funzione in Firebug con questa funzione:

TypeError: jQuery (…). ajaxSubmit non è una funzione

jQuery(this).ajaxSubmit(options); 

Questa magia è venuta in soccorso: http://codeimpossible.com/2010/01/13/solving-document-ready-is-not-a-function-and-other-problems/

( function($) { } ) ( jQuery ); 

Questo è il file js che è stato accodato con il mio plug-in – viene caricato nellintestazione:

jQuery(document).ready(function(){ var options = { target: "#output", // target element(s) to be updated with server response beforeSubmit: beforeSubmit, // pre-submit callback success: afterSuccess, // post-submit callback uploadProgress: OnProgress, //upload progress callback resetForm: true // reset the form after successful submit } jQuery("#nanny_app_upload").on("submit", function(e) { e.preventDefault(); alert("jQuery submit called"); jQuery(this).ajaxSubmit(options); alert("jQuery post submit"); // always return false to prevent standard browser submit and page navigation alert("Got this from the server: " + response); return false; }); //function after succesful file upload (when server response) function afterSuccess(){ alert("jQuery afterSuccess"); jQuery("#submit-btn").show(); //show submit button jQuery("#loading-img").hide(); //hide loading button jQuery("#progressbox").delay( 1000 ).fadeOut(); //hide progress bar } //function to check file size before uploading. function beforeSubmit(){ alert("jQuery beforeSubmit"); jQuery("#submit-btn").hide(); //hide submit button jQuery("#loading-img").show(); //show loading button jQuery("#output").html(""); } //progress bar function function OnProgress(event, position, total, percentComplete) { //Progress bar alert("jQuery OnProgress"); jQuery("#progressbox").show(); jQuery("#statustxt").show(); jQuery("#progressbar").width(percentComplete + "%") //update progressbar percent complete jQuery("#statustxt").html(percentComplete + "%"); //update status text if(percentComplete>50) { jQuery("#statustxt").css("color","#000"); //change status text to white after 50% } } }); 

Ecco il form generato da un child theme:

//Nannie upload form add_action("action_nannie_upload_form", "do_action_nannie_upload_form"); function do_action_nannie_upload_form() { $url = plugins_url(); $plugins_url = $url . "/nannie-app/"; ?><br> An Upload FORM!<br> <form action="<?php echo admin_url("admin-ajax.php"); ?>" method="post" enctype="multipart/form-data"> <br> <?php wp_nonce_field("nannie_app_upload","nannie_upload_ajax_nonce"); ?> <!-- Add new File --> <span class="btn btn-file">Select file: <input name="FileInput" type="file" /></span> <button type="submit" class="btn">Upload</button> </form> <img src="<?php echo $plugins_url; ?>images/ajax-loader.gif" style="display:none;" alt="Please Wait"/> <div style="display:none;"><div></div > <div>0%</div></div> <div></div> <br> <br> <hr/> <script src="<?php echo get_stylesheet_directory_uri(); ?>/plugins/form/jquery.form.js"></script> <script src="<?php echo get_stylesheet_directory_uri(); ?>/plugins/uload/ajaxFileUpload.js"></script> <?php } 

Ed ecco lazione che viene chiamata dal form Invia. Se rimuovo il segno di spunta per le intestazioni AJAX, carica il file e mi reindirizza a una pagina vuota.

add_action("wp_ajax_nopriv_nannie_app_upload", "nannie_app_upload"); function nannie_app_upload(){ global $wpdb; if(isset($_FILES["FileInput"])){ log_me("nannie_app_upload: FileInput found"); if (!isset( $_POST["nannie_upload_ajax_nonce"]) || !wp_verify_nonce($_POST["nannie_upload_ajax_nonce"], "nannie_app_upload")){ print "Sorry, your nonce did not verify."; log_me("nannie_app_upload: nonce did not verify"); exit; } if (!isset($_SERVER["HTTP_X_REQUESTED_WITH"])){ if(isset($_SESSION["naap_app_uid"])){ $app_uid = $_SESSION["naap_app_uid"]; } log_me("nannie_app_upload: AJAX Not Called #" . $app_uid); die(); } //Is file size is less than allowed size. if ($_FILES["FileInput"]["size"] > 5242880) { log_me("nannie_app_upload: File size is too big! #" . $app_uid); die("File size is too big!"); } $_SESSION["naap_app_uid"] = $app_uid; $UploadDirectory = WP_PLUGIN_DIR."/nannie-app/tmp/" . $app_uid . "/"; //////////////////////////////////////////////////// //http://www.saaraan.com/2012/06/ajax-file-upload-with-php-and-jquery if (!@file_exists($UploadDirectory)) { //destination folder does not exist if(!is_dir($UploadDirectory)) { mkdir($UploadDirectory); if (!@file_exists($UploadDirectory)) { log_me("nannie_app_upload: Upload directory missing for AJAX upload #" . $app_uid); die("Make sure Upload directory exist!"); } } } //allowed file type Server side check switch(strtolower($_FILES["FileInput"]["type"])) { //allowed file types case "image/png": //png file case "image/gif": //gif file case "image/jpeg": //jpeg file case "application/pdf": //PDF file case "application/msword": //ms word file case "application/vnd.ms-excel": //ms excel file case "application/x-zip-compressed": //zip file case "text/plain": //txt file case "text/html": //html file //File Title will be used as new File name $FileName = strtolower($_FILES["FileInput"]["name"]); //uploaded file name $ImageExt = substr($FileName, strrpos($FileName, ".")); //file extension $NewFileName = substr($FileName, 0, strrpos($FileName, ".") ); //file name before random $FileType = $_FILES["FileInput"]["type"]; //file type $FileSize = $_FILES["FileInput"]["size"]; //file size $RandNumber = rand(0, 9999999999); //Random number to make each filename unique. $uploaded_date = date("Y-m-d H:i:s"); $NewFileName = preg_replace(array("/\s/", "/\.[\.]+/", "/[^\w_\.\-]/"), array("_", ".", ""), strtolower($NewFileName)); $NewFileName = $NewFileName."_".$RandNumber.$ImageExt; //Rename and save uploded file to destination folder. if(move_uploaded_file($_FILES["FileInput"]["tmp_name"], $UploadDirectory . $NewFileName )){ //future SQL Insert to record the files uploaded - new table napp_applications_files log_me("nannie_app_upload: Success Upload #" . $app_uid); die("Success! File Uploaded."); break; }else{ log_me("nannie_app_upload: Failed Upload #" . $app_uid); die("error uploading File!"); break; } break; default: log_me("nannie_app_upload: Unsupported Upload #" . $app_uid); die("Unsupported File!"); //output error enforcing file types break; } }else{ log_me("nannie_app_upload: Something wrong with upload! Is "upload_max_filesize" set correctly? #" . $app_uid); die("Something wrong with upload! Is "upload_max_filesize" set correctly?"); } } 

Risposta

Devi aggiungere jquery.form.min.js per me,

Spero che funzioni per te.

Commenti

  • Sì, è richiesto jQuery.form: assicurati di controllare se altre istanze di jQuery sovrascrivono la tua abbreviazione $. (function ($) {}) (jQuery);

Risposta

ajaxSubmit non è “una funzione principale di jQuery.

Sembra che tu debba includere un plugin jQuery (come questo ) oppure riscrivi la tua funzione per utilizzare una sintassi come questa, utilizzando jQuery post()

$.post(ajaxurl, data, function(response) { // responsefunction } 

o con jQuery ajax()

$.ajax({ url: ajaxurl, context: data }); 

Assicurati di aver definito ajaxurl nel frontend – WordPress lo definisce automaticamente nel backend.

A proposito, utilizzare post() è utilizzare AJAX, poiché invii la tua richiesta in modo asincrono dal browser al server e gestisci il risultato in seguito. Questo è ciò che AJAX riguarda, anche se la tua funzione non ha un nome come AJAX 🙂

Commenti

  • Hai capito bene- ajaxSubmit è dal modulo jQuery. Ho provato ad aggiungere il plugin js a una pagina – solo per testare ma ' continuo a capire che non è una funzione. Ho aggiornato il js sopra per riflettere le modifiche fino ad ora.
  • Sembra che unaltra copia di jQuery stesse giocando con la mia testa … Ho trovato il tema offensivo e lho ucciso. Avvolto il mio codice in uno scudo: (function ($) {}) (jQuery); Niente più errori 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *