Основной выпуск
Проблема в вызове $.ajax()
, где вы должны , а не установить contentType
в JSON:
$.ajax({
url: my_ajax_handler_var.ajaxurl,
contentType: "application/json; charset=utf-8",
...
});
потому что таким образом (со стороны PHP) действие (то есть rc_generate_pa
) недоступно в $_REQUEST['action']
, который WordPress использует для определения вызываемого действия AJAX, а когда действие неизвестно, WordPress выбрасывает 400 Bad Request
ошибка.
Итак, чтобы исправить ошибку, просто удалите свойство contentType
: (или используйте что-то отличное от типа JSON)
$.ajax({
url: my_ajax_handler_var.ajaxurl,
// Don't set contentType
...
});
Второй выпуск
При обратном вызове $.ajax()
success
не используйте JSON.parse( data )
; и вот почему:
Если dataType
равно json
, jQuery автоматически проанализирует вывод ответа в объект JSON & mdash; или это может быть также строка ; см. пункт № 2 ниже.
В (PHP) rc_generate_p()
функция $pass
не является ни array
, ни object
/ class
; следовательно, в обратном вызове $.ajax()
success
data
на самом деле является недопустимой строкой JSON , и JSON.parse( data )
вызовет синтаксическую ошибку JavaScript.
Так что ваши $.ajax()
success
могут быть переписаны в:
success: function(data){
$('#p').val(data);
console.log(typeof data); // test
})
Третий выпуск
В функции rc_generate_p()
удалите echo $pass;
, иначе вы получите синтаксическую ошибку JavaScript & mdash; Ваш AJAX-вызов ожидает ответа JSON, но эта часть echo
делает недействительным JSON.
Я знаю, вы, вероятно, добавили это для отладки ошибки 400
; но я подумал, что должен напомнить вам о том, как удалить его ..:)
И, возможно, вы захотите использовать wp_send_json()
примерно так, когда вам не нужно звонить exit
, die
или wp_die()
:
function rc_generate_p() {
$pass = wp_generate_password( 8 );
wp_send_json( $pass );
}