Перейти к содержимому


не работает ajax

ошибка ajax

Сообщений в теме: 18

#1 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Январь 2012 - 02:26

после обновления ревизии перестал работать ajax
на нем был построен "пейджер" online пользователей, теперь скрипт не работает
проблема точно связана с новой ревизией, поскольку обновление на другом сервере привело к аналогичному результату

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#2 Analitic

    Активный участник

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 11 Январь 2012 - 10:22

В последней ревизии обновлен Jquery до 1.7.1.

#3 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Январь 2012 - 11:37

у меня тоже был подключен 1.7.1
проблема явно в другом

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#4 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Январь 2012 - 12:14

Просмотр сообщенияandibrag (11 Январь 2012 - 11:37) писал:

проблема явно в другом
видимо сменили dataType по умолчанию
установил явно в "html" - заработало

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#5 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 04 Март 2014 - 16:45

Не могу отследить логики. Ajax работает нестабильно. В результате работы может вернуть как требуемое значение (при insert возвращает номер созданной записи), так и страницу с ошибкой КБ - Время сессии истекло. Обновите страницу. Как лечить не понимаю. Csrf подключен. Без него запрос возвращал ошибку 500. Сейчас ajax ошибок не возвращает отрабатывает success, но запись в КБ не вносится. Подскажите куда копать.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#6 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 04 Март 2014 - 16:58

Просмотр сообщенияandibrag (04 Март 2014 - 16:45) писал:

Время сессии истекло. Обновите страницу. Как лечить не понимаю.
Присоединяюсь. Тоже очень интересует этот вопрос.

#7 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 06 Март 2014 - 10:49

Просмотр сообщенияandibrag (04 Март 2014 - 16:45) писал:

Ajax работает нестабильно.
Почему возникает проблема с сессиями? Может еще какую-нибудь переменную, имя сессии например, передать в данных? Ответьте, пожалуйста.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#8 Гость_Roman_*

  • Гости

Отправлено 06 Март 2014 - 11:02

Приведите пример. Как передаёте запрос и что выполняется на стороне сервера.

#9 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 06 Март 2014 - 11:13

Просмотр сообщенияRoman (06 Март 2014 - 11:02) писал:

Приведите пример. Как передаёте запрос и что выполняется на стороне сервера.
Это на стороне клиента
<script>
$('#addline_$ID').click(function(){
var new_data = {};
new_data['Кто добавил'] = user_ID;
new_data['Категория'] = '" . $line['Категория']['ID'] . "';
new_data['Наименование'] = '" . $line['ID'] . "';
var str = $('#num_$ID').val();
new_data['Количество'] = (Number($.trim(str))<1)?'1':(Number($.trim(str))); //проверяем значение, если меньше 1 или пустое = 1
new_data['Статус записи'] = 0;

$.ajax({
  url: 'cb_modules/cb_sqlquery.php',
  cache: false,
  type: 'POST',
  dataType: 'html',
  data: {
   typeQuery : '2', //insert
   arrData   : new_data,
   tableName : 'Заявки на покупку',
   whereStr  : '',
   csrf   : '{$csrf}'
  },
  success: function(){
	$('#addline_'+$ID).parent().slideUp(500);
	$('#toline_'+ $ID).parent().slideDown(500);
	$('#basket_empty_'+ $ID).hide(500);
	$('#basket_full_'+ $ID).show(500);
	$('#num_$ID').val('1');
  },
  error:  function(xhr,str){
   alert('Данные не переданы. Нет соединения с сервером');
  }
});
});
</script>";
Это на стороне сервера cb_sqlquery.php
<?php
// Включаем модули и подключаемся к клиентской базе
require_once $_SERVER['DOCUMENT_ROOT'] . "/cb/common.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/cb/include/config.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/cb/include/mysql_connect.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/cb/include/functions1.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/cb/include/functions2.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/cb/include/constants.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/cb/include/sql_functions.php";
$typeQuery = $_REQUEST['typeQuery'];   // тип запроса INSERT или UPDATE
$arrData = $_REQUEST['arrData'];  // массив с данными
$tableName = $_REQUEST['tableName']; // название таблицы
$whereStr = $_REQUEST['whereStr']; // условия отбора
$res = '';
$tabl = sql_select_array(TABLES_TABLE, "`name_table`='" . $tableName . "'");
switch ($typeQuery) {
	case 1;
	case 'update':
  $arr_f = array('u'=>'1', 'r'=>'0');
  update_query($arrData,$tableName,$whereStr);
  data_update($tabl['id'],  EVENTS_ENABLE , $arr_f, $whereStr);
  break;
	case 2;
	case 'insert';
	default:
  $res = insert_query($arrData,$tableName);
  $arr_f = array('u'=>'0', 'r'=>'1');
  data_update($tabl['id'],  EVENTS_ENABLE , $arr_f, "`id`='$res'");
  break;
}
echo $res;
?>

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#10 Гость_Roman_*

  • Гости

Отправлено 06 Март 2014 - 12:43

Попробуйте перед вызовом common.php поставить
$config['disable_csrf'] = 1;


#11 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 06 Март 2014 - 13:10

Просмотр сообщенияRoman (06 Март 2014 - 12:43) писал:

Попробуйте перед вызовом common.php поставить
$config['disable_csrf'] = 1;

А если код подобный выше, но только в представлениях?

if($_POST['action'] == 'print_qr') {
			if($_POST['info'] == 'get') {
				//получаем настройку наклейки, то есть печать одной или всех
				$pr['select_p'] = $zakaz['f4171'];
				echo json_encode($pr);
			}
			elseif($_POST['info'] == 'set') {
				//Сохраняем настройку печати
				$data['f4171'] = addslashes($_POST['settings']);
				data_update(11, $data, "`id`=", $_POST['id_tr']);
				echo 'done';
			}
		}

		//Получаем значение из печати из позиции заказа
		$.ajax({
			type: 'POST',
			dataType: "json",
			url: 'report.php',
			data: {id: 71, id_tr: id_tr, action: 'print_qr', 'info': 'get', csrf: csrf},
			success: function (data) {
				var type = 'Все';
				//Определяем сколько необходимо печатать
				if (data.select_p == 'Все')
					type = 'Один'
				//Меняем значение не противоположное
				$.ajax({
					type: 'POST',
					url: 'report.php',
					data: {id: 71, id_tr: id_tr, action: 'print_qr', 'info': 'set', settings: type, csrf: csrf},
					success: function (data) {
						//получаем ссылку на знак печати в строке
						var link = $("a#print_" + id_tr);
						//значение href
						var href = link.attr('href');
						var flag = 0;
						//Если успешно поменяли настройку изменяем изображение
						if (type == 'Один') {
							$("#settings_" + id_tr + " img").prop('src', "dev/img/print_one.png");
							flag = 1;
						}
						else {
							$("#settings_" + id_tr + " img").prop('src', "dev/img/print_all.png");
						}
						link.attr('href', href.substr(0, href.length - 1) + flag)
					}
				});

			}
		});
		event.preventDefault();
	});


Я так понимаю ситуация будет аналогичная, если время сессии истекло, но страницу не перезагружать. Аякс будет отправляться.

#12 Гость_Roman_*

  • Гости

Отправлено 06 Март 2014 - 13:31

В вашем случае всё точно должно работать. Проверьте через сетевые инструменты браузера, корректно ли передаётся csrf и что в ответе сервера.

#13 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 06 Март 2014 - 14:13

Просмотр сообщенияRoman (06 Март 2014 - 12:43) писал:

Попробуйте перед вызовом common.php поставить
$config['disable_csrf'] = 1;
Поставил. Пока работает. В чем смысл, какая связь с сессиями? csrf я передаю.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#14 Гость_Roman_*

  • Гости

Отправлено 06 Март 2014 - 14:19

Расхождение с генерацией csrf и её проверкой.

#15 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 06 Март 2014 - 16:50

Просмотр сообщенияRoman (06 Март 2014 - 12:43) писал:

Попробуйте перед вызовом common.php поставить
$config['disable_csrf'] = 1;
А это дырку не создает?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#16 Гость_Roman_*

  • Гости

Отправлено 07 Март 2014 - 11:16

В определённом роде да, создаёт, возможен межсайтовый запрос.

#17 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Март 2014 - 14:44

Просмотр сообщенияRoman (06 Март 2014 - 14:19) писал:

Расхождение с генерацией csrf и её проверкой.
В будущем излечимо?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#18 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 09 Июль 2016 - 21:41

Похожий случай.
Как не крутил : "Время сессии истекло" после нажатия кнопки Отправить.
Само окно ui-dialog, все ок. В тело окна подгружается форма dopd1.php и все там внутри работает.... csrf в форме передаю.
В чем может быть дело?

Заметил, что когда окно диалога открывается, в конец url подставляется символ #
Инклюды все менял. При подключении common или login диалог не открывается.

Такие вот темные дела.

Господа, срочно нужна помощь! Родина Вас не забудет!


<link rel="import" href="my_dd/dopd1.php">

var link = document.querySelector('link[rel=import]');
	   var content = link.import.querySelector('#dialog-message');
	   document.body.appendChild(content.cloneNode(true));


$("#dialog-message").dialog({
	  disabled: false,
	  resizable: false,
	  height:400,
	  modal: true	
	});

----------------
Это файл dopd1.php

<?
//session_write_close();
session_start();
$config['disable_csrf'] = 1;
//include "../login.php";
include "../include/config.php";
include "../include/constants.php";
//include "../common.php";
include "../include/sql_functions.php";
include "../include/mysql_connect.php";
include "../include/functions1.php";
//include "../include/functions2.php";
$config['disable_csrf'] = 1;

?>
<div id="dialog-message">
<form id="textsms" method="post" name="textsms">
<p style="text-align:center">Введите текст</p>
<input name="csrf" type="hidden" value=<? echo $csrf; ?>/>
<input name="save" type="submit" value="Отправить" />
</form>
</div>

... а уже не надо, спасибо, аяксом сделал отправку формы, так даже еще проще вышло.

Сообщение отредактировал Tony999: 10 Июль 2016 - 07:34

Умные сайты на заказ
https://info.crm-master.info

#19 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 20 Январь 2017 - 13:32

Попробуйте вместо
<input name="csrf" type="hidden" value=<? echo $csrf; ?>/>
написать
<input name="csrf" type="hidden" value="<? echo $csrf; ?>"/>





Количество пользователей, читающих эту тему: 4

0 пользователей, 4 гостей, 0 анонимных