AJAX Ошибка Drupal-7 - PullRequest
       6

AJAX Ошибка Drupal-7

0 голосов
/ 12 сентября 2011

Я создаю модуль, в котором есть зависимость между списками.Есть три поля со списком: страна, штат и район.Если я выберу Индию в поле со списком стран, то поле со списком штатов будет содержать все штаты Индии, и то же самое в случае округа.

Я сделал это с помощью AJAX.Он работает правильно в форме добавления, но когда я собираюсь обновить любой, возникает следующая ошибка:

An AJAX HTTP error occurred.
HTTP Result Code: 500
Debugging information follows.
Path: /drupal/?q=system/ajax
StatusText: Service unavailable (with message)
ResponseText: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ajax' in 'where clause': SELECT district_name, country_id,state_id FROM {ajax_district} where id = ajax; Array
(
)
in edit_district_form() (line 291 of /home/mansmu/www/drupal/sites/default/modules/ajaxtest/ajaxtest.district.inc).

Мой код:

////////////////////////////////////////////////////////
///////// FUNCTION FOR EDIT
////////////////////////////////////////////////////////
function edit_district_form($form, &$form_state) {
$request_url = request_uri();
// $request_id to get id of edit district.
$request_id = drupal_substr(strrchr($request_url, '/'), 1);

//// FOR country
$rows = array();
$result = db_query("SELECT id,country_name from {ajax_country} order by country_name");
while ($data = $result->fetchObject()) {
$id = $data->id;
$rows[$id] = $data->country_name;
}

//// FOR state
$state = array();
$result = db_query("SELECT id,state_name from {ajax_state} order by state_name");
while ($data = $result->fetchObject()) {
$id = $data->id;
$state[$id] = $data->state_name;
}

// $district_name varible to get name from database for a requested id.
$district_name = db_query("SELECT district_name, country_id,state_id FROM {ajax_district} where id = ".$request_id);
// Loop For show vehicle district name in text field to be update.
foreach ($district_name as $district) {*/
$form['values']['edit_country_name'] = array(
'#type' => 'select',
// '#default_value' => "{$district->country_id}",
'#required' => TRUE,
'#options' => $rows,
'#ajax' => array(
'effect' => 'fade',
'progress' => array('type' => 'none'),
'callback' => 'state_callback_edit',
'wrapper' => 'replace_edit_state',
),
);

$form['values']['edit_state_name'] = array(
'#type' => 'select',
// '#default_value' => "{$district->state_id}",
'#required' => TRUE,
'#options' => array(),
// The prefix/suffix provide the div that we're replacing, named by #ajax['wrapper'] above.
'#prefix' => '',
'#suffix' => '',
);

$form['values']['edit_district_name'] = array(
'#type' => 'textfield',
'#size' => 30,
//'#default_value' => "{$district->district_name}",
'#maxlength' => 80,
'#required' => TRUE,
);
}

$form['edit_district_submit'] = array(
'#type' => 'submit',
'#value' => t('Update'),
);
$form['actions']['cancel'] = array(
'#markup' => l(t('Cancel'), 'district'),
);

return $form;
}
////////////////////////////////////////////////////////
///////// FUNCTION FOR AJAX CALL BACK
////////////////////////////////////////////////////////
function state_callback_edit($form, &$form_state) {
// An AJAX request calls the form builder function for every change.
// We can change how we build the form based on $form_state.
if (!empty($form_state['values']['edit_country_name'])) {
$country_id = $form_state['values']['edit_country_name'];
$rows1 = array();
$result = db_query("SELECT id, state_name from {ajax_state} where country_id = $country_id order by state_name");
while ($data = $result->fetchObject()) {
$id = $data->id;
$rows1[$id] = $data->state_name;
}
$form['edit_state_name']['#options'] = $rows1;
}
return $form['values']['edit_state_name'];
}

1 Ответ

1 голос
/ 12 сентября 2011

Ваша строка кода здесь:

$request_id = drupal_substr(strrchr($request_url, '/'), 1);

возвращает строку 'ajax', в результате чего ваш третий оператор SQL выглядит следующим образом:

SELECT district_name, country_id,state_id FROM {ajax_district} where id = ajax;

Очевидно, что 'ajax' не так, я думаю, вы хотите значение из URL? Вы можете использовать arg () функцию , чтобы извлечь это, так что вам не нужно запускать drupal_substr и т. Д.

Если ваш путь ajax/12, то arg(0) вернет 'ajax', arg(1) вернет 12 и т. Д.

Надеюсь, что поможет

UPDATE

Если вам нужно сохранить идентификатор запроса в форме, сделайте что-то подобное в функции формы:

$form['request_id'] = array('#type' => 'value', '#value' => $request_id);

Затем, когда вы получаете обратный вызов ajax, вы можете получить его из $form_state['values']['request_id'] или $form['request_id']['#value']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...