I have autocomplete textbox which populate the suggestion based on search text.
Steps
- User type in search text box
- User press enter instead of waiting for AJAX autocomplete to respond
It comes up with the following error.
An AJAX HTTP request terminated abnormally.
Debugging information follows.
Path: path/allcontent/autocomplete
StatusText: error
ResponseText: ReadyState: 4
I read Drupal alerts "An AJAX HTTP request terminated abnormally" during normal site operation, confusing site visitors/editors, but it didn’t help.
This is the callback code.
Autocomplete Textbox
function search_user($form) { $form['text_usersearch'] = array( '#type' => 'textfield', '#title' => t(''), '#autocomplete_path' => 'searchuser/autocomplete', '#size' => 30, '#attributes' => array('class'=> array('auto_submit'),'style'=> array('float:left')), ); $form['submit_user'] = array( '#type' => 'submit', '#value' => t('Find'), '#attributes' => array('class'=> array('submit_user linkbuttonAction'),'style'=> array('float:left;margin-left:10px')), );
Autocomplete menu register
$items['searchuser/autocomplete'] = array( 'title' => 'Autocomplete for User', 'page callback' => 'user_autocomplete_search', 'access arguments' => array('access content'), //or whatever permission makes sense 'type' => MENU_CALLBACK );
Menu callback
function user_autocomplete_search($string) { global $user; $arrUserMatch = array(); $matchCode = '%'.db_like($string).'%'; $arrUserTitle = SelectMatchingUserTitle($matchCode,10); foreach ($arrUserTitle as $userId=>$userName) { $autotext .= check_plain($userName); $arrUserMatch[$userName] = $autotext; } drupal_json_output($arrUserMatch); }
Form submission handler
function search_user_submit($form, &$form_state) { $searchval= $form['text_usersearch']['#value']; if($searchval=='') return; else drupal_goto('user/'.$searchval); }
JavaScript autocomplete
$(window).load(function(){ Drupal.jsAC.prototype.select = function (node) { this.input.value = $(node).data('autocompleteValue'); if(jQuery(this.input).hasClass('auto_submit')){ this.input.form.submit(); }}; });
Sponsored by SupremePR