2011-09-12 5 views
0

콤보 상자간에 종속성이있는 모듈을 만들고 있습니다. 국가, 주 및 구의 세 가지 콤보 상자가 있습니다. 국가 콤보 상자에서 인도를 선택하면 상태 콤보 상자에는 인도의 모든 주와 지구의 경우에 동일한 콤보 상자가 포함됩니다.AJAX 오류 Drupal-7

저는 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

귀하의 라인 :

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

은 returni입니다 세 번째 SQL 문은 다음과 같이하고, 문자열 '아약스'NG :

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

분명히 '아약스 것은'이 잘못이다, 난 당신이 URL에서 값을 원하는 것 같아요? 당신은 그래서 당신은 당신의 경로가 ajax/12 다음 arg(0)는, '아약스'를 반환합니다 arg(1) 등등 12과를 반환하는 경우 drupal_substr

를 실행할 필요가 없습니다이를 추출 arg() function를 사용할 수 있습니다. 양식에 요청 ID를 저장해야하는 경우

UPDATE

을하는 데 도움이

희망은 양식 함수에서 같은 것을 할 :

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

를 그런 다음에 들어갈 때 귀하의 아약스 콜백을 $form_state['values']['request_id'] 또는 $form['request_id']['#value']

+0

답장을 보내 주셔서 감사합니다. 예, url에서 값을 원하지만 아약스를 호출하면 url은 system/ajax가 아닌 edit/12입니다. 여기서 12는 업데이트 할 내 지역의 ID입니다. M : 아약스 호출에서이 ID를 보낼 수 없습니다.이 문제는 저에게오고 있습니다. –

+0

Gotcha 코드는 – Clive

+0

으로 업데이트되었습니다. 업데이트 된 코드는 작동하지 않습니다. –