У меня есть эта таблица на моей локальной DB < /p>
CREATE TABLE site_languages (
id INT AUTO_INCREMENT PRIMARY KEY,
language_name VARCHAR(50) NOT NULL,
language_code VARCHAR(5) NOT NULL UNIQUE,
enabled TINYINT NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
< /code>
С этими данными < /p>
INSERT INTO site_languages (language_name, language_code, enabled)
VALUES
('Greek', 'gr', 0),
('English', 'en', 1),
('German', 'de', 1),
('Spanish', 'es', 1);
< /code>
В проекте, который я работаю, мы используем Fat Fat Framework для бэкэнд и требуется для Frond-End.
, поэтому у меня есть этот беззаботный контроллер для обработки вызовов к конечной точке на DB которые соответствуют этой таблице. < /p>
< /code>
Вот метод Query :: table (), который я не могу изменить, потому что также используется в других частях проекта. < /p>
/* $table = sql table
$fields = fields to return in table
$f3 = fatfree reference
$custom = specially designed custom fields, such as referencing another column in another table
$where = array used to filter
$presort = string used to filter
$idField = special ID field for table display */
public static function table($table, $fields, $f3, $custom=null, $where=null, $presort=null, $idField=null, $dataTableFastCount=false, $returnPHPType=false, $sqlOptions=null) {
$datas = array();
$isXlsxAll = isset($returnPHPType['xlsx']) && is_array($returnPHPType['xlsx']);
$columns = $f3->get('db')->schema($table);
$searchable = array();
$start = ( $f3->exists('POST.start') ? $f3->get('POST.start') : 0 );
$length = ( $f3->exists('POST.length') ? $f3->get('POST.length') : 50 );
if( $length < 1 ) {
$length = 0;
}
if($isXlsxAll){
$start = 0;
$length = 0;
}
$filter = array();
$search = ( $f3->exists('POST.search') && isset( $f3->get('POST.search')['value'] ) ? $f3->get('POST.search')['value'] : null );
if( $search !== null && $search != '' ) {
foreach( $f3->get('POST.columns') as $column ) {
if( $column['searchable'] != 'false' && isset( $column['data'] ) && $column['data'] != '' && array_key_exists($column['data'],$columns) ) {
$searchable[] = '`' . $column['data'] . '` LIKE :value';
}
}
if( count( $searchable ) > 0 ) {
$filter = array(' ( ' . implode( ' OR ', $searchable ) . ' )',':value'=>'%'.$search.'%');
}
if( $where != null ) {
$filter[0] = $where[0] . ' AND' . $filter[0];
array_shift( $where );
foreach( $where as $key => $value ) {
if(is_numeric($key)){
$filter[] = $value;
} else {
$filter[$key] = $value;
}
}
}
} else {
if( $where != null ) {
$filter = $where;
}
}
if( $presort != null ) {
$filter[] = $presort;
}
$order = ( $f3->exists('POST.order') && isset( $f3->get('POST.order')[0]['column'] ) ? $f3->get('POST.order')[0]['column'] : null );
if( array_key_exists($f3->get('POST.columns')?$f3->get('POST.columns')[$order]['data']:'',$columns) ) {
if( $order !== null ) {
$order = $f3->get('POST.columns')[$order]['data'] . ' ' . $f3->get('POST.order')[0]['dir'];
}
} else {
$order = null;
}
if($sqlOptions==null) $sqlOptions = array();
$options = $sqlOptions + array( 'offset' => $start, 'limit' => $length, 'order' => $order, 'distinct' => false );
$data = self::rows($table,$filter,$options,$fields);
$index = $start;
if( !$data->dry() ) {
$datas['draw'] = ( $f3->exists('POST.draw') ? (int)$f3->get('POST.draw') : 1 );
if($dataTableFastCount){
$datas['recordsTotal'] = self::fastCountInnoDB($dataTableFastCount);
} else {
$countCache = $f3->get('SESSION.CACHE_COUNT_' . $table);
if(isset($countCache) && is_array($countCache) && !empty($countCache) && $countCache[0] >= time() - (5 * 60)){
$datas['recordsTotal'] = $countCache[1];
} else {
$datas['recordsTotal'] = self::count($table);
$f3->set('SESSION.CACHE_COUNT_' . $table, array(time(), $datas['recordsTotal']));
}
}
if($options['distinct']){
$datas['recordsFiltered'] = self::countDistinctImproved($table, $idField, $filter);
} else {
$datas['recordsFiltered'] = self::count($table, $filter);
}
do {
$tmp = $data->cast();
if( $idField === null ) {
$tmp['DT_RowId'] = $tmp['id'];
} else {
$tmp['DT_RowId'] = $tmp[$idField];
}
if( $custom != null ) {
foreach( $custom as $decode ) {
if( $decode['type'] == 'json' ) {
$decoded = json_decode( $tmp[$decode['column']], true );
if( isset( $decoded[$decode['field']] ) ) {
$tmp['image'] = $decoded[$decode['field']];
} else {
$tmp['image'] = $decode['default'];
}
} else if( $decode['type'] == 'sql' ) {
$id = 'id';
if( isset( $decode['custom_id'] ) ) {
$id = $decode['custom_id'];
}
$new_field = $decode['column'];
if( isset( $decode['new_field'] ) ) {
$new_field = $decode['new_field'];
}
$row = self::row( $decode['table'], array($id.'=?',$tmp[$decode['column']]) );
$tmp[$new_field] = $row->{$decode['field']};
} else if( $decode['type'] == 'sql_object' ) {
$id = 'id';
$fields = null;
if( isset( $decode['custom_id'] ) ) {
$id = $decode['custom_id'];
}
if( isset( $decode['fields'] ) ) {
$fields = $decode['fields'];
}
$new_field = $decode['column'];
if( isset( $decode['new_field'] ) ) {
$new_field = $decode['new_field'];
}
$row = self::row( $decode['table'], array($id.'=?',$tmp[$decode['column']]), $fields );
$tmp[$new_field] = $row->cast();
} else if( $decode['type'] == 'date_desc' ) {
$tmp[$decode['column'].'_desc'] = date( 'F jS, Y', $tmp[$decode['column']] );
} else if( $decode['type'] == 'sql_count' ) {
$countFilter = $decode['filter'];
$countFilter[0] .= ' AND '.$decode['id_column'].'=?';
$countFilter[] = $tmp['id'];
$tmp[$decode['new_field']] = Query::count($decode['table'],$countFilter);
} else if( $decode['type'] == 'limit' ) {
$ccontent_limit = $tmp[$decode['column']];
$tmp[$decode['column'].'_limit'] = General::trimString( $ccontent_limit, $$decode['length'], $append = '...', false );
} else if( $decode['type'] == 'function' ) {
$new_field = $decode['column'];
if( isset( $decode['new_field'] ) ) {
$new_field = $decode['new_field'];
}
$tmp[$new_field] = $decode['function']($tmp);
} else if( $decode['type'] == 'const' ) {
$new_field = $decode['column'];
$tmp[$new_field] = $decode['value'];
}
}
}
$index++;
$tmp['row_index'] = $index;
$datas['data'][] = $tmp;
} while( $data->skip() );
} else {
$datas['draw'] = 0;
$datas['recordsTotal'] = self::count($table);
$datas['recordsFiltered'] = self::count($table,$filter);
$datas['data'] = array();
}
if($returnPHPType===true){
return $datas;
} else if($isXlsxAll){
if($datas['recordsFiltered']>1500){
ExcelReportHelpler::array2Csv($table, $returnPHPType['xlsx'], $datas['data']);
} else {
ExcelReportHelpler::array2Xlsx($table, $returnPHPType['xlsx'], $datas['data']);
}
} else {
//echo json_encode( $datas );
echo sprintf('{"draw":%s,"recordsTotal":%s,"recordsFiltered":%s,"data":[',$datas['draw'], $datas['recordsTotal'], $datas['recordsFiltered']);
$first = true;
foreach ($datas['data'] as $d){
if(!$first){
echo ",";
}
echo json_encode( $d );
$first = false;
}
echo ']}';
}
}
< /code>
и на моем модуле ranguage_admin.js я делаю призыв API на эту конечную точку /языки. > render '); < /code>]
Вот как: < /p>
define(function(require){// use of define() from RequireJS to define our module
'use strict';
//use of require() function to load our dependencies
var router = require('router');
var page = require('page');
var $ = require('jquery');
// declaration of the module Object
var module = {
tmpl: { // use of require('hbs!...') to load a Handlebars template (languagesadmin).
languagesAdmin: require('hbs!app/languages_admin/tmpl/languagesadmin'),
},
}
//register our route add(method, route, action)
router.add('get', '/languagesAdmin', function() { module.languagesAdmin(); });
module.languagesAdmin = function() {
// AJAX call to our end-point using jQuery's method ajax()
$.ajax({
url: '/languagesAdminTable',
type: 'GET',
dataType: 'json',
success: function(response) {
//just print the response on console
console.log("Response:", response);
},
error: function(xhr, status, error) {
console.error("Error fetching languages:", status, error);
$('#datatable_container').html('
Error loading data.
');
}
});
//set page's content with our template
page.content(module.tmpl.languagesAdmin, null, function(){});
//set page's title
page.title('Languages Administration');
//set the current active menu item.
page.menu('languagesAdmin');
// Updates the UI with the current navigation path... like on breadcrumbs.
// It merges settings, user data, and the provided paths object,
// then renders the updated path using the pathTmpl template.
page.path();
}
//Allows other modules to use this module via require().
return module;
});
< /code>
Но когда я делаю вызов на этой конечной точке, я получаю это сообщение на консоли: < /p>
Ошибка извлечения языки : parsererror syntaxError: json.parse:
Неожиданный символ в строке 1 Столбец 1 данных JSON < /p>
< /blockquote>
Можете ли вы сказать мне, как Чтобы позвонить Query :: table () в моих языках adman.php, чтобы данные возвращались в формате json?
Подробнее здесь: https://stackoverflow.com/questions/794 ... s-returned
Как позвонить в запрос :: table () в моих языках adman.php, чтобы данные были возвращены в формате JSON? ⇐ Php
Кемеровские программисты php общаются здесь
1740407299
Anonymous
У меня есть эта таблица на моей локальной DB < /p>
CREATE TABLE site_languages (
id INT AUTO_INCREMENT PRIMARY KEY,
language_name VARCHAR(50) NOT NULL,
language_code VARCHAR(5) NOT NULL UNIQUE,
enabled TINYINT NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
< /code>
С этими данными < /p>
INSERT INTO site_languages (language_name, language_code, enabled)
VALUES
('Greek', 'gr', 0),
('English', 'en', 1),
('German', 'de', 1),
('Spanish', 'es', 1);
< /code>
В проекте, который я работаю, мы используем Fat Fat Framework для бэкэнд и требуется для Frond-End.
, поэтому у меня есть этот беззаботный контроллер для обработки вызовов к конечной точке на DB которые соответствуют этой таблице. < /p>
< /code>
Вот метод Query :: table (), который я не могу изменить, потому что также используется в других частях проекта. < /p>
/* $table = sql table
$fields = fields to return in table
$f3 = fatfree reference
$custom = specially designed custom fields, such as referencing another column in another table
$where = array used to filter
$presort = string used to filter
$idField = special ID field for table display */
public static function table($table, $fields, $f3, $custom=null, $where=null, $presort=null, $idField=null, $dataTableFastCount=false, $returnPHPType=false, $sqlOptions=null) {
$datas = array();
$isXlsxAll = isset($returnPHPType['xlsx']) && is_array($returnPHPType['xlsx']);
$columns = $f3->get('db')->schema($table);
$searchable = array();
$start = ( $f3->exists('POST.start') ? $f3->get('POST.start') : 0 );
$length = ( $f3->exists('POST.length') ? $f3->get('POST.length') : 50 );
if( $length < 1 ) {
$length = 0;
}
if($isXlsxAll){
$start = 0;
$length = 0;
}
$filter = array();
$search = ( $f3->exists('POST.search') && isset( $f3->get('POST.search')['value'] ) ? $f3->get('POST.search')['value'] : null );
if( $search !== null && $search != '' ) {
foreach( $f3->get('POST.columns') as $column ) {
if( $column['searchable'] != 'false' && isset( $column['data'] ) && $column['data'] != '' && array_key_exists($column['data'],$columns) ) {
$searchable[] = '`' . $column['data'] . '` LIKE :value';
}
}
if( count( $searchable ) > 0 ) {
$filter = array(' ( ' . implode( ' OR ', $searchable ) . ' )',':value'=>'%'.$search.'%');
}
if( $where != null ) {
$filter[0] = $where[0] . ' AND' . $filter[0];
array_shift( $where );
foreach( $where as $key => $value ) {
if(is_numeric($key)){
$filter[] = $value;
} else {
$filter[$key] = $value;
}
}
}
} else {
if( $where != null ) {
$filter = $where;
}
}
if( $presort != null ) {
$filter[] = $presort;
}
$order = ( $f3->exists('POST.order') && isset( $f3->get('POST.order')[0]['column'] ) ? $f3->get('POST.order')[0]['column'] : null );
if( array_key_exists($f3->get('POST.columns')?$f3->get('POST.columns')[$order]['data']:'',$columns) ) {
if( $order !== null ) {
$order = $f3->get('POST.columns')[$order]['data'] . ' ' . $f3->get('POST.order')[0]['dir'];
}
} else {
$order = null;
}
if($sqlOptions==null) $sqlOptions = array();
$options = $sqlOptions + array( 'offset' => $start, 'limit' => $length, 'order' => $order, 'distinct' => false );
$data = self::rows($table,$filter,$options,$fields);
$index = $start;
if( !$data->dry() ) {
$datas['draw'] = ( $f3->exists('POST.draw') ? (int)$f3->get('POST.draw') : 1 );
if($dataTableFastCount){
$datas['recordsTotal'] = self::fastCountInnoDB($dataTableFastCount);
} else {
$countCache = $f3->get('SESSION.CACHE_COUNT_' . $table);
if(isset($countCache) && is_array($countCache) && !empty($countCache) && $countCache[0] >= time() - (5 * 60)){
$datas['recordsTotal'] = $countCache[1];
} else {
$datas['recordsTotal'] = self::count($table);
$f3->set('SESSION.CACHE_COUNT_' . $table, array(time(), $datas['recordsTotal']));
}
}
if($options['distinct']){
$datas['recordsFiltered'] = self::countDistinctImproved($table, $idField, $filter);
} else {
$datas['recordsFiltered'] = self::count($table, $filter);
}
do {
$tmp = $data->cast();
if( $idField === null ) {
$tmp['DT_RowId'] = $tmp['id'];
} else {
$tmp['DT_RowId'] = $tmp[$idField];
}
if( $custom != null ) {
foreach( $custom as $decode ) {
if( $decode['type'] == 'json' ) {
$decoded = json_decode( $tmp[$decode['column']], true );
if( isset( $decoded[$decode['field']] ) ) {
$tmp['image'] = $decoded[$decode['field']];
} else {
$tmp['image'] = $decode['default'];
}
} else if( $decode['type'] == 'sql' ) {
$id = 'id';
if( isset( $decode['custom_id'] ) ) {
$id = $decode['custom_id'];
}
$new_field = $decode['column'];
if( isset( $decode['new_field'] ) ) {
$new_field = $decode['new_field'];
}
$row = self::row( $decode['table'], array($id.'=?',$tmp[$decode['column']]) );
$tmp[$new_field] = $row->{$decode['field']};
} else if( $decode['type'] == 'sql_object' ) {
$id = 'id';
$fields = null;
if( isset( $decode['custom_id'] ) ) {
$id = $decode['custom_id'];
}
if( isset( $decode['fields'] ) ) {
$fields = $decode['fields'];
}
$new_field = $decode['column'];
if( isset( $decode['new_field'] ) ) {
$new_field = $decode['new_field'];
}
$row = self::row( $decode['table'], array($id.'=?',$tmp[$decode['column']]), $fields );
$tmp[$new_field] = $row->cast();
} else if( $decode['type'] == 'date_desc' ) {
$tmp[$decode['column'].'_desc'] = date( 'F jS, Y', $tmp[$decode['column']] );
} else if( $decode['type'] == 'sql_count' ) {
$countFilter = $decode['filter'];
$countFilter[0] .= ' AND '.$decode['id_column'].'=?';
$countFilter[] = $tmp['id'];
$tmp[$decode['new_field']] = Query::count($decode['table'],$countFilter);
} else if( $decode['type'] == 'limit' ) {
$ccontent_limit = $tmp[$decode['column']];
$tmp[$decode['column'].'_limit'] = General::trimString( $ccontent_limit, $$decode['length'], $append = '...', false );
} else if( $decode['type'] == 'function' ) {
$new_field = $decode['column'];
if( isset( $decode['new_field'] ) ) {
$new_field = $decode['new_field'];
}
$tmp[$new_field] = $decode['function']($tmp);
} else if( $decode['type'] == 'const' ) {
$new_field = $decode['column'];
$tmp[$new_field] = $decode['value'];
}
}
}
$index++;
$tmp['row_index'] = $index;
$datas['data'][] = $tmp;
} while( $data->skip() );
} else {
$datas['draw'] = 0;
$datas['recordsTotal'] = self::count($table);
$datas['recordsFiltered'] = self::count($table,$filter);
$datas['data'] = array();
}
if($returnPHPType===true){
return $datas;
} else if($isXlsxAll){
if($datas['recordsFiltered']>1500){
ExcelReportHelpler::array2Csv($table, $returnPHPType['xlsx'], $datas['data']);
} else {
ExcelReportHelpler::array2Xlsx($table, $returnPHPType['xlsx'], $datas['data']);
}
} else {
//echo json_encode( $datas );
echo sprintf('{"draw":%s,"recordsTotal":%s,"recordsFiltered":%s,"data":[',$datas['draw'], $datas['recordsTotal'], $datas['recordsFiltered']);
$first = true;
foreach ($datas['data'] as $d){
if(!$first){
echo ",";
}
echo json_encode( $d );
$first = false;
}
echo ']}';
}
}
< /code>
и на моем модуле ranguage_admin.js я делаю призыв API на эту конечную точку /языки. > render '); < /code>]
Вот как: < /p>
define(function(require){// use of define() from RequireJS to define our module
'use strict';
//use of require() function to load our dependencies
var router = require('router');
var page = require('page');
var $ = require('jquery');
// declaration of the module Object
var module = {
tmpl: { // use of require('hbs!...') to load a Handlebars template (languagesadmin).
languagesAdmin: require('hbs!app/languages_admin/tmpl/languagesadmin'),
},
}
//register our route add(method, route, action)
router.add('get', '/languagesAdmin', function() { module.languagesAdmin(); });
module.languagesAdmin = function() {
// AJAX call to our end-point using jQuery's method ajax()
$.ajax({
url: '/languagesAdminTable',
type: 'GET',
dataType: 'json',
success: function(response) {
//just print the response on console
console.log("Response:", response);
},
error: function(xhr, status, error) {
console.error("Error fetching languages:", status, error);
$('#datatable_container').html('
Error loading data.
');
}
});
//set page's content with our template
page.content(module.tmpl.languagesAdmin, null, function(){});
//set page's title
page.title('Languages Administration');
//set the current active menu item.
page.menu('languagesAdmin');
// Updates the UI with the current navigation path... like on breadcrumbs.
// It merges settings, user data, and the provided paths object,
// then renders the updated path using the pathTmpl template.
page.path();
}
//Allows other modules to use this module via require().
return module;
});
< /code>
Но когда я делаю вызов на этой конечной точке, я получаю это сообщение на консоли: < /p>
Ошибка извлечения языки : parsererror syntaxError: json.parse:
Неожиданный символ в строке 1 Столбец 1 данных JSON < /p>
< /blockquote>
Можете ли вы сказать мне, как Чтобы позвонить Query :: table () в моих языках adman.php, чтобы данные возвращались в формате json?
Подробнее здесь: [url]https://stackoverflow.com/questions/79463851/how-to-call-querytable-in-my-languagesadmin-php-so-that-the-data-is-returned[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия