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();
}};
});
'delivery callback' => 'ajax_deliver'
and return array of matches from yourpage callback
.