Использование jQuery для вызова конечной точки и заполнения данных в интерфейсе является общей задачей. После поиска и использования нескольких решений ниже приведена моя текущая схема для любых вызовов ajax.
Как я могу улучшить следующее, чтобы быть быстрее и эффективнее? Я понимаю, что делать это в чистом javascript будет быстрее, но на этом этапе я предполагаю, что jQuery будет присутствовать.
Frontend – Javascript:
$(document).ready(function() { function callEndpoint( call_url, payload ){ return $.ajax({ url: call_url, type: 'GET', data: payload }); } $( '.get-endpoint' ).click( function() { sSelected = $( this ).text(); console.log( sSelected ); oRequest = callEndpoint( '/play/endpoint2.php', { 'type': sSelected } ); oRequest.done(function( sJson ) { aData = JSON.parse( sJson ); $( '.from-endpoint' ).text( aData.text ); }); }); });
Frontend – Html:
<body> <button class="get-endpoint">Games</button> <button class="get-endpoint">Books</button> <button class="get-endpoint">Comics</button> <div class="from-endpoint">Coming soon...</div> </body>
Backend – PHP:
$aReturn[ 'text' ] = ''; if( !empty( $_GET ) ) { if( $_GET[ 'type' ] == 'Games' ) { $aReturn[ 'text' ] = 'Text for games'; } else if( $_GET[ 'type' ] == 'Books' ) { $aReturn[ 'text' ] = 'Text for books'; } else if( $_GET[ 'type' ] == 'Comics' ) { $aReturn[ 'text' ] = 'Text for comics'; } } $sJson = json_encode( $aReturn, 1 ); header( 'Content-Type: application/json' ); echo $sJson;
Я не думаю, что этот код может быть более эффективным в jQuery. Но у вас есть несколько вариантов, чтобы дать более эффективное чувство:
Имейте в виду, что чем больше HTML-кода вы загружаете, тем больше времени потребуется, чтобы инициировать поведение JavaScript на нем.
Похоже, ваши категории не будут меняться часто. Вы можете сэкономить некоторую пропускную способность, используя JavaScript localstorage или файлы cookie для кэширования данных. Если вы планируете подключиться к базе данных mysql в какой-то точке, вы можете использовать StoredProcedures, которые являются переменными прекомпилированными операторами.
Поскольку вы все равно собираетесь использовать JSON и jQuery, я бы посоветовал вам проверить метод getJSON для jQuery. Я чувствую, что это уменьшит некоторые строки кода, хотя я не уверен, что это поможет ему стать более эффективным. В любом случае getJSON – это просто сокращение AJAX, и я подумал, что должен предложить это.
Это может быть хорошим подходом для браузера браузера данных AJAX-> server->. Надеюсь, он удовлетворит ваши потребности.
JQuery
$( function () { function fetch( data ) { var encoding = data.encoding, url = data.url, params = data.params, type = ( data.type ) ? : 'GET', cache = ( data.cache ) ? : 'false', async = ( data.async ) ? : 'true'; return $.ajax({ url: url, async: async, cache: cache, data: params, dataType: encoding, type: type }); } var options = { url: 'controller.php', params: { param_one: value_one, param_two: value_two, param_n: value_n }, encoding: 'json' }; // Get the JSON feed from the server $.when( fetch( options ) ).then( function ( response ) { // Is there anything in the pool? if ( response ) { // Store the response and use it in your code var data = response.data; console.log( data.responseOne ); console.log( data.responseTwo ); } }); });
Контроллер PHP
// Set header to application/json header( 'Content-type: application/json' ); // Create the DB connection object $dbc = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME ); // Initialize parameters array $params = array(); // Store the query variables in an array $query_type = ( $_GET ) ? : $_POST; // Run foreach and store the values in an array foreach ( $query_type as $key => $value ) { $params[ $key ] = mysqli_real_escape_string( $dbc, $value ); } // Now you can access passed parameters like $params['param_name'] // This would be the data obtained from DB or some server array processing, whatever $response = array( 'data' => array( 'response_one' => 'some_value', 'response_two' => 'another_value' ) ); // Encode the result echo json_encode( $response );
Если вы не хотите использовать чистый javascript, вы можете улучшить свой код jQuery с лучшими селекторами
Например, вы можете добавить id
в <div class="from-endpoint">
Вы можете добавить тег в селектор:
$('button.get-endpoint')
$.get
. $(document).ready(function() { $( '.get-endpoint' ).click( function() { sSelected = $( this ).text(); console.log( sSelected ); oRequest = $.get('/play/endpoint2.php', { 'type': sSelected }); oRequest.done(function( sJson ) { aData = JSON.parse( sJson ); $( '.from-endpoint' ).text( aData.text ); }); }); });