Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как получить ответ ajax

Здравствуйте!

Нужно получить данные от ajax по загрузке проца в массиве, для вывода в график

соответственно чтоб получить к примеру 10 точек

будет выглядеть так
      
function CpuLoad() {
var data = [];
for(var i = 0;i<10;i++){
$.ajax({
type: 'get',
url: 'cpuload',
dataType: 'json',
success: function (response) {
data.push(response);
if(data.length==10){
var cpu = [];
for(var i=0 in data){
cpu.push([i,data[i]])
}

console.log(cpu);

}

},


});

}
}


в итоге я получу массив точек, вариант конечно так себе, но хз как иначе

мне нужно получить такой вот массив

[ [1, 93], [2, 14.01], [3, 20] ]

и все это дело обновлять каждые 30 сек

можно конечно и по другому, но проблема везде одна, асинхронное выполнение

в итоге аякс мне возвращает false, а мне нужно получить массив в переменной cpu

async:false - не вариант

конечно если поместить код графика сюда, там где консоль, все бы хорошо, но как делать обновление данных?

     if(data.length==10){
var cpu = [];
for(var i=0 in data){
cpu.push([i,data[i]])
}

console.log(cpu);

}


в сети опять же ничего толком нет, только примеры с произвольными данными, ну там то понято, все легко и просто, а вот как с этим аяксом быть?
Ответ:
Ну за идею спс, как то я сам не догадался про хранения на серваке, думаю писать в файл, и юзать для этого cron, и думаю без websocket удастся обойтись

а так то оно сейчас работает, только график дерганный((
Вопрос: Получить данные из ajax запроса

Доброго времени суток, форумчане!
Подскажите, пожалуйста, как получить данные из ajax запроса?
executeScalarAjaxRequest: function (data) {
        var id = null;
        console.log("Параметры запроса к API " + data.resource + ":");
        console.log(data);
 
        $.ajax({
            type: "POST",
            url: "/api/proxy",
            dataType: "json",
            contentType: "application/json",
            data: JSON.stringify(data),
            success: function (response) {
                console.log("Параметры ответа к API " + data.resource + ":");
                console.log(response);
                alert(response);
                id = response;
            },
            error: function (status) {
                alert("Ошибка при получении данных: " + status.responseText);
            }
        });
        return id;
    }

Функция возвращает null, хотя сервер возвращает верные данные, вижу это в консоли и в alerte.
Ответ: А я даже не удосужился чего там return, success ... какие к черту проблемы.
Вопрос: Как правильно получить данные с $.ajax и затем использовать в запросе к бд

Добрый день.
Помогите, пожалуйста, разобратся почему не выходит получить данные по ajax и затем использовать в запросе.
Есть, например, чекбокс с датой.

HTML5
1
2
<div class="checkbox-row"><input type="checkbox" name="check" id="1" value="2017-06-01" checked="checked">
<label for="1">2017-06-01</label></div>
Есть запрос, который по идее должен передать пару ключ=>значение
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 $(function(){
    $('.checkbox-row :checkbox').change(function(){
        if (!this.checked) return;
        $('.checkbox-row :checked').not(this).prop('checked',false);
        // Проверка стоит галочка или нет
        if ($(this).is(':checked')) {
 
            var chk = $(this).attr("name");
            var chkVal = $(this).attr("value");
 
            // Ваш запрос
            $.ajax({
                url: 'test.php',
                type: 'post',
                data: { chk: chkVal },
                beforeSend: function() { alert(chk+ ' '+chkVal); },
                success: function(data) {$('.choose_place').load('test.php', function() {
                    alert('Load was performed.');
 
                });
                }
            });
 
        }
    });
});
alert выводит check 2017-06-01

И есть обработчик test.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$date_trip = isset($_POST['chk'])? $_POST['chk']:'';
$sql_select =  "SELECT date_place.id_place FROM date_place
                INNER JOIN DATE ON date.id_datetrip = date_place.id_datetrip
                WHERE date.datetrip =  '$date_trip'
                AND typeplace =  'available'";
$date_select = mysql_query($sql_select);
$count = mysql_affected_rows();
$info = '';
for($i=0; $i<$count;$i++){
    $date_info = mysql_fetch_assoc($date_select);
 
    $info.='<input type="checkbox" name="place[]" id="place_'.$date_info['id_place'].'" value="place_'.$date_info['id_place'].'">';
    $info.='<label for="place_'.$date_info['id_place'].'"></label>';
}
echo $info;
запрос к бд рабочий,
если поставить вручную WHERE date.datetrip = '2017-06-01',
то все сработает, получается что в $date_trip ничего не передается.
Как получить значение выбранного чекбокса для запроса, подскажите, пожалуйста?
Ответ: Продолжаем дебажить...
PHP
1
2
3
4
$date_trip = isset($_POST['chk'])? $_POST['chk']:'';
var_dump($_POST); // Что выведет эта штука?
$sql_select =  "SELECT date_place.id_place FROM date_place
...
Вопрос: Ajax запрос - как получить структурированный ответ?

В примерах которые я нашел в интернете, если нужно в страницу с которой был ajax запрос передать данные, используется конструкция echo с помощью которой формируется текст ответа.

ajax запрос
Код:
var val 1234567;
$.
ajax({
    
method"GET",
    
url"simple.php",
    
data: {"param1"val},
    
asyncfalse,
    
success: function(data){
        
alert(data);
    }
}); 


simple.php
Код:
<?php
$p1 
$_GET["param1"];
......
echo 
"тра-та-та";
echo 
"ля-ля-ля";
echo 
"и так далее";
...
exit;
?>


Вопрос: можно ли в ajax запросе получить от php скрипта структурированный ответ?

Например: как при перенаправлении на конкретную страницу используя функцию header
header('Location: тра-та-та&msg2=ля-ля-ля&msg3=');
При этом передаются значения конкретных переменных

Подсказка от модератора:
Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
Используйте отступы в коде для форматирования текста.
Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Ответ: Можно просто рисовать новый или перерисовывать имеющийся элемент.
Возвращайте корректный ответ и помещайте содержимое в новый элемент или перерисовывайте имеющиеся элементы.
И не пишите много echo. плохая привычка.
- есть прототип передачи переменных как в функции, если Вам так будет понятнее.
Код:
$var1 = 1;
$var2 = 'string';
$p1 = isset($_GET["param1"]) ? $_GET['param1'] : ''; // php 7 - $_GET['param1'] ?? $_GET['param1'];
echo $var1,
 $var2,
 'param1:',
 $p1;

А вообще, тут сначала азы подучите:



Модератор! Не засирай посты. Измените вы уже этот <матное слово=""> code, не позорьтесь :)
пуcть уже [ code=php ][/ code ] Будет и напишите вы выше редактора крупно жирно красным правило и если не доходит уже до людей банить и удалять мусор. Чем больше ненужной информации вычистить тем будет лучше. А вы наоборот пополнение занимаетесь.
Вопрос: Отправить данные из file, hidden, text на сервер вне form и получить ответ AJAX/PHP

Здравствуйте, помогите пожалуйста.
Дано: разнотипные поля (hidden, submit, file) без формы <form>
Задача: с помощью js создать форму, закинуть в нее значения со всех данных полей, всё это передать файлу php ( а точнее в обработку php-скрипта, который находится в этом же файле), и вывести результат(ответ) php-скрипта на эту же страницу без перезагрузки.

Файл для загрузки - это excel
Все остальные поля тоже должны быть переданы в управление/обработку php
Тег <form> использовать нельзя/не надо.

Сделала скрипт, отдает ответ положительный, о том что всё передано, но в msg показы данные только с поля type=file, а в php ничего не приходит и не выводится.

Периодически ругается еще

"Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/."

Помогите пожалуйста.

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery.min.js"></script>
</head>
<body>

<div id="excelload">
	<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
	Выберите файл:
	<input name="userfile" id="load_file" type="file" value="" />
	<input type="submit" value="Загрузить" name="submit_load" id="submit_load" />
</div>

<p class="modal"></p>


<script>
$('#excelload #submit_load').click(function() {

var formData = new FormData();

formData.append('MAX_FILE_SIZE', $('#excelload input[type=hidden]').val());
formData.append('submit_load', $('#excelload input[type=submit]').val());
formData.append('userfile', $('#excelload input[type=file]')[0].files[0]);

/*var xhr = new XMLHttpRequest();
  xhr.open("POST", "<? echo $_SERVER['REQUEST_URI'] ?>", true);
  xhr.setRequestHeader('Content-Type', 'multipart/form-data;');
  xhr.send(formData);*/
 
$.ajax({
    type: "POST",
    url: "<? echo $_SERVER['REQUEST_URI'] ?>",
	//dataType: "json",
    data: formData,
	
    contentType: false,
    processData: false,
    success: function(msg) {
        $(".modal").html("<code>GooD!"+msg+"</code>");
    },
    error: function() {
        $(".modal").html("<pre>Sorry! Couldn't process your request.</pre>");
    }
});

});

</script>


<?php

if(isset($_POST['submit_load'])) {
	$data1 = $_FILES;
	$data1_name = $_FILES['userfile']['name'];
	
	$data2 = $_POST;
	
    echo json_encode($data1);
    echo json_encode($data1_name);
	
    echo json_encode($data2);
}

?>


</body>
</html>
Ответ: К сожалению данные файла не поступают в обработку php. Данные из "формы"/полей должны поступить в php. То есть в php код if($_FILES['userfile']['name'] != '') или if($_POST != 0) в этих переменных должны лежать данные с полей, и, при условии что в эти переменные действительно чтото пришло, выполнится последующий php код (загрузить/изменить/ и т.д) и далее при успешном выполнеии php, на страницу вывести слово/текст с помощью Ajax.
Извините, если не совсем понятно выражаюсь.
Вопрос: Возврат значения в ajax

На php у меня шаблон mvc, но вот проблема не знаю как оптимизировать ajax под него, ибо в xhr.open(указывается ссылка на обработчик), скажем который получает $_POST.

И тот самый обработчик .php, получает значение и одновременно возвращает лишь в том случае, если класс обработчика вызван в этом же файле (файле обработчика). т.е.

1)ajax файл : xhr.open('file1.php');
2)php файл (file1.php) :

class A { function a() { echo $_POST['text']; } };
$obj = new A();
$obj->a();

При таком раскладе file1 получит значение и ajax вернет его, но если экземпляр класса был создан в другом файле, или был вызван метод ф-и в другом файле - аргумента нет.

Таким образом вообще не получает получить значение с помощью ооп и непонятно какому файлу передавать ajax-запрос, то ли контроллеру, то ли модели, то ли виду.
Ответ: class a {
public function a() {

И что в итоге будет? Не дважды ли получите значение?

Если вы выполняли пример, в котором нет Ajax, что в прочем не играет роли, и он не выполнялся, то что-то вы колбасите свое, а что не знаю.

Вот все ваше практически, только имя файла класса изменено, а то не понять о чем речь, и имя класса и файл запроса имеют одно имя, и что это за пример, тот что работаете или нет. Немного сократил, в местах где клава глючила, но это тоже не важно.

Класс, лежит по тому же пути что и файл обработчик - в папке my.

class a {
    public function f() {
        print_r($_POST);
    }
}


Файл обработчик и непосредственно html, то есть все в одном.

<?php
if($_POST) {
    include 'class.php';
    $c = new a();
    $c->f();
    exit;
}
?>
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body>
<button id="submit">GO</button>
<script> 
document.getElementById('submit').addEventListener('click', function() {
    var xhr = new XMLHttpRequest();
    xhr.open('POST', location);
    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xhr.onload = function() {
        if(xhr.status == 200) alert(xhr.responseText);
    }
    xhr.send("d=1");
}, false);
</script>
</body> 
</html>


И проблем никаких.
Вопрос: Собственные логи Ajax запросов

Как бы реализовать такое. Все работает без проблем, но иногда пользователи жалуются на то и это. А понять, что у них там не так не получается. Как бы сделать собственное логирование с результатом ответа Ajax запроса, что там, почему и когда у них произошло. И стоит стоит также учесть повисшие запросы. Нажал он к примеру кнопочку, ну и к примеру загрузил себе файл с запросами во время данного соединения и отправил мне.
Заранее благодарен
Ответ:
Сообщение от mmotor
Нет мне надо узнать, что клиент отправляет и что получает в ответ, или не получает, и сколько на это времени у него уходит. Чтобы узнать, то ли у него мускул упал, то ли это ошибка сервера, и если да то какая и когда произошла, то ли ответа вообще не поступило, то ли интернет оборвался, то ли php вывел ошибку, то ли еще что-нибудь о чем я не подумал.
Для таких вещей обычно ведут журналирование запросов в базе: пришел запрос, записали дату, тело запроса, откуда пришел, входящий /исходящий и тд и тп. Отправили запрос записали в журнал.
но уж точно не пытаться сохранить где то у пользователя эти данные и уж точно не надеяться на то что он будет искать кнопочку для отправки.
Вопрос: Мульти замена DOM-элемента на Ajax

Здравствуйте!

Есть две кнопки:
HTML5
1
2
<a class="btn btn-xs btn-warning disable" title="Остановить"><span class="glyphicon glyphicon-stop"></span></a>
<a class="btn btn-xs btn-success enable" title="Запустить"><span class="glyphicon glyphicon-play"></span></a>
На странице всегда отображается только одна из них.
На странице выводится список сайтов. И рядом с каждым есть кнопка, меняющая статус сайта: "Остановить" или "Запустить".

Следующий код меняет статус у сайта и заменяет кнопку на другую:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
jQuery(function($) {
    // Установка статуса сайта в "Остановлен"
    $('.site .disable').click(function(e) {
        var site = $(this);
        var id = site.parents('.site').attr('data-id');
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: 'sites/disable',
            data: {id:id},
            dataType: 'json',
            success: function(jsondata) {
                if(jsondata.success==1) {
                    site.parents('.site').find('.buttons .disable').replaceWith(jsondata.button);
                }
            },
            error: function(data) {
                alert('Ошибка отправки Ajax-запроса');
            }
        });
    });
 
    // Установка статуса сайта в "Активный"
    $('.site .enable').click(function(e) {
        var site = $(this);
        var id = site.parents('.site').attr('data-id');
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: 'sites/enable',
            data: {id:id},
            dataType: 'json',
            success: function(jsondata) {
                if(jsondata.success==1) {
                    site.parents('.site').find('.buttons .enable').replaceWith(jsondata.button);
                }
            },
            error: function(data) {
                alert('Ошибка отправки Ajax-запроса');
            }
        });
    });
});
На стороне php все прекрасно работает, в БД запись меняется. Ajax работает, кнопки заменяются. Если страницу потом обновить, тоже видим уже обновленные кнопки.

Но есть следующая проблема. При первом нажатии на кнопку ее код полностью заменяется на другую. Но, при последующем нажатии на уже новую кнопку (если не обновить страницу), новой замены не происходит. Если я правильно понял, то не срабатывает функция $.ajax(), т.к. на сервер ничего тоже не посылается и php не срабатывает.

Помогите пожалуйста разобраться, а то какой-то не полноценный ajax получился у меня.
Ответ: Всё дело в том, что вы навешиваете обработчики клика $.click() после полной загрузки страницы на элементы, представляющие из себя кнопки, лишь однажды. После того, как вы заменяете вашу кнопку на другую, обработчик события для "новоприбывшего" элемента не навешивается. Отсюда и тишина.

Добавлено через 2 минуты
Вам следует либо перенавешивать обработчики заново при каждом клике (что довольно глупо), либо почитать про делегирование событий.

Добавлено через 5 минут
Например можно обернуть ваши кнопки в обёртку, описать обработчик клика по обёртке, который определяет, какая из кнопок сейчас в обёртке, и выполняет соответствующие действия.
Вопрос: Остановка отправки формы ajax

Добрый день.

Не могу разобраться с ajax. При помощи ajax, я делаю проверку в базу на наличия повторения ФИО, если в базе такое ФИО есть, то ajax возвращает 1, а иначе 0. И так проверка происходит при нажатии кнопки submit (т.е. при отправки формы), в случаи если ajax возвращает 1, отправка формы останавливается, проблема в том ято я не могу остановить отправку формы, по идеи отправка формы должна происходить при команде "return false", но в теле ajax эта команда не срабатывает, а если попытаешься вывести результат работы ajax за тело, то остановка формы все ровно не происходит (я так понял из-за того, что ajax отрабатывается в самом конце работы скрипта). Кто может мне подсказать, как мне остановить отправку формы в зависимости от полученного результата от ajax.

1. Вариант (попытка остановки формы вне тела ajax):

Код

function call() {  
    
    var error = true;    
     
    var msg   = $('#form_ajax').serialize();
    
    $.ajax({        
        type: 'POST',
        url: "validat.php",
        data: msg,
        datatype: "json",
        success:   
                
        function(data){

            var json = JSON.parse(data)

            if(json.duble_user == 1){

                construct_messages(config_valid["duble_user"],'text');

                error = false; 
            }
        }            
    }); 
    
    if(error === false){

        return false;          
    } 
}


2. Вариант ((попытка остановки формы в теле ajax)

Код

function call() {  
        
    var msg   = $('#form_ajax').serialize();
    
    $.ajax({        
        type: 'POST',
        url: "validat.php",
        data: msg,
        datatype: "json",
        success:   
                
        function(data){

            var json = JSON.parse(data)

            if(json.duble_user === 1){

                construct_messages(config_valid["duble_user"],'text');

               return false;
            }
        }            
    });
}


P.S. Я понимаю есть скорей всего другие варианты, но вначале я хочу понять, если есть возможность остановки отправки формы в моем случаи.

Ответ:
Причем она уходит только в том случаи, когда в ajax добавляешь параметр 

Код

async: false


Это сообщение отредактировал(а) Niko8D - 15.10.2015, 15:26
Вопрос: Оптимальный вариант ответа Ajax/PHP

Доброго времени суток.
Я, как типичный дилетант (пока), прошу помощи у местных, знатных профессионалов веб-разработки.

Есть вот такой скрипт:
$('.ajax').click(function (event) {
		event.preventDefault();
		$.ajax({
			url: "/index.php?action=test",
			method: 'POST',
			type: 'POST',
			data: $('.form-ajax').serialize(),
			success: function (data) {
				
			}
		})
	});


Сие "чудо", отправляет ПОСТ запрос без перезагрузки страницы. УРЛ указывает на пхп функцию, точнее на пхп-метод из объекта в моделях.
Надо, чтобы если поля не заполнены вывести во вью(ХТМЛ) сообщение "Заполните поля", если поля заполнены вывести, допустим "Всё ОК!".
Ответ: Decode,
Благодарствую!