Keine Objekteigenschaften, die das Formular über AJAX senden

Ich verwende ein modales Fenster mit + -Formular, um den Profilavatar zu ändern. Wie folgt (functions.php):

add_action('change_avatar', 'edit_avatar_function'); function edit_avatar_function($uid, $pid) { $av = get_user_meta($uid, 'avatar_' . 'project', true); $avatar = wp_get_attachment_image_src( $av, 'thumb300' ); ?>  

Ich nenne dieses Modal mit auf meiner Seite und ich sende die Infos durch AJAX, die Aktion so einreihen (functions.php)

 add_action('wp_ajax_update_avatar_function', 'update_avatar_function', 10, 2 ); function update_avatar_function(){ $pid = $_POST['pid']; $uid = $_POST['uid']; $avatar = $_POST['avatar']; //perform update user meta and other stuff //send me back uid and pid to check if they're correct $response = array('uid'=>$uid,'pid'=>$pid); echo json_encode($response); die(); } add_action( 'wp_enqueue_scripts', 'add_frontend_ajax_javascript_file', 10, 2 ); function add_frontend_ajax_javascript_file() { wp_localize_script( 'ajax-script', 'ajaxobject', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } 

Spätestens benutze ich diese jQuery / AJAX:

 var updatebuttonav = $('#upload-avatar'); updatebuttonav.on('click', function() { event.preventDefault(); update_avatar(); }); function update_avatar() { var form_data = new FormData($('form#change-avatar')[0]); form_data.append('pid', $('#pid').val()), //no sending value form_data.append('uid', $('#uid').val()), //no sending value form_data.append('avatar', $('#input-avatar')[0].files[0]), //no sending file form_data.append('action', 'update_avatar_function'), console.log(form_data); //here is printing No Properties jQuery.ajax({ method: 'post', url : ajaxurl, dataType: 'json', data: form_data, processData: false, beforeSend:function(data){ //other functions }, success:function(data) { alert(data.uid + data.pid); }, error: function(data){ console.log(data); } }); //alert("a"); } 

Nun, mit diesem sehe ich in meiner console.log dass keine console.log und Werte gesendet werden. Außerdem ist die Antwort von json Nan . Ich benutze diese Methode mit anderen Abschnitt meiner Website und ich kann nicht sehen, warum hier. Es funktioniert nicht. Ist das möglich, dass durch do_action die Form nicht gesehen wird? Fehle ich etwas? Jeder Vorschlag wäre mehr als geschätzt!

Hinweis: Ich benutze das wp_ajax_nopriv nicht, weil ich es brauche, wenn ich natürlich eingeloggt bin.

Solutions Collecting From Web of "Keine Objekteigenschaften, die das Formular über AJAX senden"

Sie können versuchen, new FormData() anstelle von new FormData($('form#change-avatar')[0]) . Außerdem sollten Sie nach processData:false hinzufügen, da jQuery es ansonsten falsch setzt , und für url sollten Sie statt ajaxurl ajaxobject.ajaxurl , da der zweite Parameter bei wp_localize_script der Name des Javascript-Objekts ist

Zuerst würde ich sicherstellen, dass die function update_avatar() die Formulardaten lesen kann. Vielleicht muss die function ein Objekt akzeptieren? Wie die Form oder sogar das Ereignis …

Zweitens denke ich, dass Sie in Ihren Daten eine “Aktion” angeben müssen. Dies ist der Name der Ajax-function, die die gesendeten Daten verarbeitet. Mit anderen Worten, das Ziel des Ajax Calls. In Ihrem Fall wäre es:

action: 'update_avatar_function'

Weitere Informationen finden Sie im Codex .

(Sie könnten Beispieldaten fest codieren, um sicherzustellen, dass der Ajax ordnungsgemäß funktioniert, und anschließend die Formulardaten senden.)