php5 и jQuery ajax возвращают массив

#php #jquery #mysql #ajax #json

#php #jquery #mysql #ajax #json

Вопрос:

Я пытаюсь выяснить, как использовать jQuery .ajax() для запроса таблицы MySQL и возврата результатов в виде массива. Это то, что у меня есть до сих пор:

jQuery:

 $.ajax({url: 'procedures?',
    data: {Action: 'GetSuggestList' },
    dataType: "json",
    success: function(oData){
        if(oData.errormsg != null)
              alert('failed: '   oData.errormsg);
        alert(oData.results);
}});
  

PHP-код (с предположением, что мои mysql_connect() и mysql_select_db() допустимы):

  $pcAction = isset( $_REQUEST['Action'] ) ? $_REQUEST['Action'] : "" ;
 if($pcAction=='GetSuggestList'){
     $tb_name = 'suggestions';
     echo json_encode( DoGetSuggestList($tb_name) ) ;
 }

 function DoGetSuggestList($ptb_name){
     $qry_suggest = mysql_query('SELECT * FROM ' . $ptb_name . ' WHERE Active ORDER BY updated DESC');
     $rsl_suggest = mysql_fetch_array($qry_suggest);
     $jSONreturn = array("errormsg" => $jSONerror, "results" => $rsl_suggest);

     return $jSONreturn;
 };
  

Я не уверен, что еще должно быть в моей функции успеха AJAX, чтобы выполнять итерации по каждой результирующей строке в массиве…

Комментарии:

1. Если вам нужны все результаты, разве у вас не должен быть вызов mysql_fetch_array в цикле while? Как теперь выглядит json, который вы получаете обратно? (вы можете использовать console.log (OData), если у вас установлен firebug)

2. Я бы повторил $pcAction … имя таблицы $tb_name может быть не задано

3. @machinemessiah — Я думаю, вы правы насчет наличия mysql_fetch_array в цикле, потому что console.log (OData) возвращает результаты только для 1 записи

Ответ №1:

Я думаю, вам нужно, чтобы результаты запроса были сброшены в ассоциированный массив перед json_encode() ними.

 while( ... ) {
    $a_results[] = array( 's_column' => $row['column'] );
}

return json_encode( array('errormsg' => $jSONerror, 'results' => $a_results) );