Регистрация
Вход через соцсети
Восстановление пароля

AJAX в netcat

Новый топик
16.02.2015, 09:15
Ответить | Цитировать
Коваль Виталий

Зарегистрирован:
2015-02-01
Сообщений: 24

Например есть необходимость использовать getXmlHttpRequest (AJAX).
Как это сделать в самописном сайте понятно.

alfa-gorod.ru/objects.html - пример: при выборе города загружаются его районы.
Изображение


Как это сделать в netcat? Что мне сделать исполняемым файлом и как к нему обратиться потом что бы получить ответ в JSON.....???

Код:
    //Получение и отправка параметров
function sendAjaxFunc(param) {
var qFile = 'query.php'; //ссылка на query файл
var lFile = 'districts'; //ссылка на исполняемый файл подгружаемый в query файл
var resId = 'districts'; //ИД для вывода результата

var reqStr = 'query=' + lFile + '&' + 'city=' + param;
getAjaxXML(reqStr, qFile, resId);
}
//Обрабока параметров
function getAjaxXML(reqStr, qFile, resId) {
var reqString = getXmlHttpRequest();
reqString.onreadystatechange = function () {
if (reqString.readyState != 4) return;
{
var respJs = JSON.parse(reqString.responseText);
if (respJs.type == 'error') {
window.location.reload()
} else if (respJs.type == 'success') {
var text = respJs.text.toString();
document.getElementById(resId).innerHTML = text;
}
}
}
reqString.open('POST', '<?=baseurl?>' + '/' + qFile, true);
reqString.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
reqString.setRequestHeader("Content-Length", reqStr.length);
reqString.send(reqStr);
}
function getXmlHttpRequest(){
if(window.XMLHttpRequest)
return new XMLHttpRequest();
else
return null;
}
22.02.2015, 16:58
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Если я правильно понял Ваш вопрос, вам нужно создать php-скрипт, который будет выдергивать из БД нужные данные по AJAX-запросам.
Вот вам болванка для такого скрипта:
Код:

<?php
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {

include_once '../../../vars.inc.php';
include_once '../../connect_io.php';
include_once '../default/function.inc.php';

global $db;
$cities=$db->get_results("select * from Classificator_Region where Checked=1", ARRAY_A);

if(!empty($cities)) {
$result = array('type'=>'success', 'cities'=>$cities);
} else {
$result = array('type'=>'error');
}
echo json_encode($result);
}
?>

Кладем сей скрипт, например, в /netcat/modules/default/ и используем его в своих AJAX-запросах.

02.02.2016, 19:33
Ответить | Цитировать
Kit

Зарегистрирован:
2016-02-02
Сообщений: 3

А как можно сделать паджинацию на ajax? В готовых решениях партнёров смотрел, там с использованием стороннего плагина и не совсем то.
У меня в табах (на одной странице) выводится информация из двух инфоблоков и нужно подгружать контент по паджинации каждого инфоблока.
Табы реализованы первым инфоблоком в разделе в котором выводятся названия двух других инфоблоков в этом разделе, которые как раз и содержат записи, паджинацию по которым нужно подгружать ajax.
Код такой:
Код:
	<section class="articles">
<div class="articles_inner">
<h1 class="articles_title">Заголовок</h1>
</div>
<ul class="articles_tabs">
<li class="articles_tabsItem ui-tabs-active"><a href="#tab1" class="articles_tabsLink">Раздел статей 1</a></li>
<li class="articles_tabsItem"><a href="#tab2" class="articles_tabsLink">Раздел статей 2</a></li>
</ul>
<section class="tab1" id="atr1">
<div class="atr_inner">
<div class="art_list2">
<div class="artycle">
<div class="art_author"><?=$f_Author;?></div>
<div class="art_caption"><?=$f_Anons;?></div>
<p><?=$f_Text;?></p>
</div>
<div class="artycle">
<div class="art_author"><?=$f_Author;?></div>
<div class="art_caption"><?=$f_Anons;?></div>
<p><?=$f_Text;?></p>
</div>
<?= $nextLink ? "<a href='$nextLink&isNaked=1' class='btn link-next1' onclick=\"javascript:void(0);\">показать ещё</a></p>" : '' ?>
</div>
</section>
<section class="tab2 tabs-hide" id="atr2">
<div class="atr_inner">
<div class="art_list2">
<div class="artycle">
<div class="art_author"><?=$f_Author;?></div>
<div class="art_caption"><?=$f_Anons;?></div>
<p><?=$f_Text;?></p>
</div>
<div class="artycle">
<div class="art_author"><?=$f_Author;?></div>
<div class="art_caption"><?=$f_Anons;?></div>
<p><?=$f_Text;?></p>
</div>
<?= $nextLink ? "<a href='$nextLink&isNaked=1' class='btn link-next2' onclick=\"javascript:void(0);\">показать ещё</a></p>" : '' ?>
</div>
</section>
<script type="text/javascript">
$(document).ready(function(){
$('.link-next1').click(function(){
$.ajax({
url: $(this).attr("href"),
cache: false,
beforeSend: function() {
$('.art_list1').html('Загружаем');
},
success: function(html){
$(".art_list1").html(html);
}
});
return false;
});

$('.link-next2').click(function(){
$.ajax({
url: $(this).attr("href"),
cache: false,
beforeSend: function() {
$('.art_list2').html('Загружаем');
},
success: function(html){
$(".art_list2").html(html);
}
});
return false;
});

});
</script>
</div>
</section>


при клике подгружается не нужный мне блок с вкладками(табами), т.к. он входит в контент выводимый инфоблоками страницы, a нужно только объекты инфоблоков
И ещё как не использовать в url следующей странице ?isNaked=1, чтобы поисковиками всё индексировалось нормально?
спасибо!
07.02.2016, 15:25
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

В рамках форума, боюсь, не смогу вас проконсультировать - тут полчасика попрограммировать надо, хорошенько разобравшись с особенностями вывода ваших инфоблоков.
Не вникая в детали, могу дать только общие рекомендации:
1. Если у вас разрешен вывод только первого инфоблока, а другие инфоблоки выводятся из его кода с помощью nc_objects_list, то вам нужно позаботиться о передаче в эту функцию GET-параметра curPos. По умолчанию он не передается внутрь этой функции что может сбивать с толку.
2. Где-то на странице нужно создать скрытый элемент, из которого ваш ajax-обработчик сможет брать URL инфоблока (не раздела, а именно инфоблока), чтобы именно на этот URL и передавать curPos для нужной вам вкладки. И уже оттуда пусть подгружает нужные данные с использованием isNaked, конечно. Чтобы поисковики не видели ваш isNaked, ставьте его не в html-код, а в js.

198 196 2016-02-07 15:25:33 14012
Описание проекта