Привет, я интегрирую библиотеку jFormer в Wordpress и решаю проблему с вызовами Ajax в WordPress. Я зарегистрировал свои Ajax-хендеры в плагине WordPress ниже:
add_action('wp_ajax_nopriv_jFormerForWp', 'JFormerForWP::AjaxHandler');
add_action('wp_ajax_jFormerForWp', 'JFormerForWP::AjaxHandler');
По сути, мне нужно отправить в запросе POST переменную с именем action => jFormerForWp.
Проблема в том, что мои навыки jQuery ограничены, я попросил разработчиков, и они могут вернуться ко мне, когда смогут, но подумали, что я открою это для общего сообщества jQuery в надежде, что они могут помочь.
Итак, чтобы подтвердить, мне нужно изменить код jQuery для отправки action = jFormerForWp.
Код здесь http://www.jformer.com/download/jFormer-dev.zip с приведенной ниже выдержкой из того, где, как мне кажется, запрос сделан формой. Большое спасибо, Крис
submitForm: function(event) {
var self = this;
// Use a temporary form targeted to the iframe to submit the results
var formClone = this.form.clone(false);
formClone.attr('id', formClone.attr('id')+'-clone');
formClone.attr('style', 'display: none;');
formClone.empty();
formClone.appendTo($(this.form).parent());
// Wrap all of the form responses into an object based on the component jFormComponentType
var formData = $('<input type="hidden" name="jFormer" />').attr('value', encodeURI(jFormerUtility.jsonEncode(this.getData()))); // Set all non-file values in one form object
var formIdentifier = $('<input type="hidden" name="jFormerId" value="'+this.id+'" />');
formClone.append(formData);
formClone.append(formIdentifier);
this.form.find('input:file').each(function(index, fileInput) {
if($(fileInput).val() != '') {
// grab the IDs needed to pass
var sectionId = $(fileInput).closest('.jFormSection').attr('id');
var pageId = $(fileInput).closest('.jFormPage').attr('id');
//var fileInput = $(fileInput).clone()
// do find out the section instance index
if($(fileInput).attr('id').match(/-section[0-9]+/)){
var sectionInstance = null;
var section = $(fileInput).closest('.jFormSection');
// grab the base id of the section to find all sister sections
var sectionBaseId = section.attr('id').replace(/-section[0-9]+/, '') ;
sectionId = sectionId.replace(/-section[0-9]+/, '');
// Find out which instance it is
section.closest('.jFormPage').find('div[id*='+sectionBaseId+']').each(function(index, fileSection){
if(section.attr('id') == $(fileSection).attr('id')){
sectionInstance = index + 1;
return false;
}
return true;
});
fileInput.attr('name', fileInput.attr('name').replace(/-section[0-9]+/, '-section'+sectionInstance));
}
// do find out the component instance index
if($(fileInput).attr('id').match(/-instance[0-9]+/)){
// grab the base id of the component to find all sister components
var baseId = $(fileInput).attr('id').replace(/-instance[0-9]+/, '')
var instance = null;
// Find out which instance it is
$(fileInput).closest('.jFormSection').find('input[id*='+baseId+']').each(function(index, fileComponent){
if($(fileComponent).attr('id') == $(fileInput).attr('id')){
instance = index + 1;
return false;
}
return true;
});
fileInput.attr('name', $(fileInput).attr('name').replace(/-instance[0-9]+/, '-instance'+instance));
}
$(fileInput).attr('name', $(fileInput).attr('name')+':'+pageId+':'+sectionId);
$(fileInput).appendTo(formClone);
}
});
// Submit the form
formClone.submit();
formClone.remove(); // Ninja vanish!
// Find the submit button and the submit response
if(!this.options.debugMode){
this.controlNextButton.text(this.options.submitProcessingButtonText).attr('disabled', 'disabled');
}
else {
this.form.find('iframe:hidden').show();
}
},