Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Отправка переменной с JS в php с последующем получением ответа (Ajax?)

Всем привет. Нужно реализовать вот такую схему:
Запрос с айди в JS > php файл с функцией (желательно, одной из нескольких), которая передаст этот айди в БД, от куда получит массив > отправка массива обратно в JS основного файла

Надеюсь на то, что у меня получилось все нормально объяснить )

Добавлено через 57 минут
Иначе говоря, мне нужно отправить запрос в пхп, и получить от туда массив, который уже будет обрабатываться посредством JS
Ответ: Кое-как нашел решение. Тему можно закрывать.
Вопрос: Изменить ответ сервера ajax

ВСем привет а как можно при помощи ajxa послать запрос и при получении ответа прежде чем ответ попадет в скрипт его изменить??
Ответ: gam0ra,
То что ты нарисовал на схеме -- это ни о чем. *концептуально* у тебя есть 2 актора -- клиент и сервер, которые обмениваются сообщениями. javascript, браузер, сеть, компьютеры, etc -- это детали реализации, которые не должны тебя, в данном случае интересовать. Поэтому, схема проще: клиент <-текст-> сервер. В нашем случае, клиент -- это тот, кто всегда запрашивает, а сервер -- кто всегда отвечает. Что касается твоего вопроса, то, в ответ ajax попадает строка, и ты с этой строкой можешь делать все что угодно.
Вопрос: Отправить данные из 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.

Доброго времени суток.

Есть страница с формой. Данные из неё отправляются оп ajax. Приходит ответ...
А вот теперь самое интересное, как, в зависимости от полученных данных, отправить автоматически. средствами js. уже другую форму по post.
Желательно даже с переходом на страницу на которую отправляются данные.

Спасибо за ранее)
Ответ: Решение найдено)
Итак. Первое, собственно код:

это ajax (кстати, вверху я сделал ошибку в синтаксисе document.getElementsById('form').submit(); , а тут ее исправил)
$(document).ready(function() { // либо $(function() {
    $('#moren').click(function(){
        $.ajax({
            url:"test.php",
            cache: false,
            success: function(res){ 
                if(res=="go"){
                	document.getElementById('someInputId').value = res;
                	document.getElementById('form').submit();
                }
            }
        }
    });
});


далее форма для отправки
<form id="form" method="post">
<input id="go" type='text' name='go' value = ''>
<input type='submit'>


И как оказалось, если мы хотим ее отправить, она должна быть перед js кодом.
Почему то по другому не получилось.

skyANA, krvsa спасибо)))
Вопрос: Отправка и получение данных AJAX

Доброго времени.

Такая ситуация: на странице есть таблица, пытаюсь сделать добавление записи через всплывающую форму (на форме два поля типа file) - поэтому для отправки формы использую formData, с отправкой проблем не возникает, а вот как отправленные данные вставить в таблицу на форме не могу понять?

Вот что использую для отправки:
$('#modal_form').on('submit', function (e) {
        e.preventDefault();
        var $that = $(this),
            formData = new FormData($that.get(0));
            formData.append('type_form', 'table1');
/* для проверки отправляемых данных */
        console.log(formData.get('type_form'));
        console.log(formData.get('f1'));
        console.log(formData.get('f2'));
        console.log(formData.get('f3'));
        console.log(formData.get('f4'));
        console.log(formData.get('f5'));
/* для проверки отправляемых данных */
        $.ajax({
            url: $that.attr('action'),
            type: $that.attr('method'),
            contentType: false,
            processData: false,
            data: formData,
            //dataType: 'json',
            success: function (data) {
                if (data == '1'){
                    alert('Данные успешно добавлены');
                } else {
                    $('#modal_form #msg').fadeIn(100).delay(5000).html(data);
                    $('#modal_form #msg').fadeOut(100).html(data);
                }
            }
        });
    });


Теоретически подозреваю, что нужно с сервера только что добавленные поля собирать в массив или делать запрос к БД и обратно отправлять и вставлять их в таблицу!?
А вот каким образом?
Ответ: У вас есть всего два варианта:

1) Форма, это де-факто диалог клиент-сервер, который подразумевает обязательную проверку данных сервером. Сервер не поместит данные формы в базу до тех пор, пока они не будут отвечать условиям. Отсюда следует, что данные помещаемые в базу, это есть клон данных в форме клиента (диалог то асинхронный). Значит зачем возвращать клиенту то, что у него и так имеется - берем значения value каждого поля формы и помещаем его в ячейку таблицы, в которой находится поле ввода. Само поле ввода удаляем. И так со всеми полями формы.
Что касаемо файлов, то с ними можно поступить точно также. Но тут могут быть же тоже вариации - например, файлы, это изображения, и средствами HTML5 можно организовать их предпросмотр, а значит и оставить в таблице как информация о том, что загружено. Но если изображение при загрузке обрабатывается сервером, то желательно видеть результат, а значит серверу нужно возвращать адрес на успешно загруженное изображение.
Ну и плюс - допустим, что уже добавленное в базу можно было редактировать, значит нужно не удалять поля и не переписывать их значения в таблицу, а всего лишь менять стиль (для выделения) и режим полей (например ключ), и кнопку на "Редактирование". В этом случае сервер должен вернуть идентификатор добавленной записи этих данных.

2) Север возвращает принятые данные, которые отобразятся на клиенте. Но такое делать имеет смысл тогда, когда сервер производит некие манипуляции с данными, модифицирует их, иначе то смысла нет.
Вопрос: Остановка отправки формы 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 запросов

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

Всем привет)
У меня появились сразу 2 проблемы (вроде всё верно написано, но не работает).

В общем вот у меня есть вот 1 форма
HTML5
1
2
3
4
5
6
7
8
<form name="payment" method="post" action="https://site.com/test.php" accept-charset="UTF-8">
Введите сколько голосов
<input type="text" name="sum" value="" id="sum" onKeyUp='calc();'>
 
<input type="hidden" name="co_id" value="<?php echo $cfg["ik_shop_id"]; ?>">
<input type="hidden" name="total" id="total" value="">
 
<button type="submit" id="submitIk" >Далее</button>
В input "total" посылается ajax-ом значение(в зависимости от значения из "sum")
Далее у меня идёт такой скрипт:
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
<script>
    var btnInk = $('#submitIk');
    btnInk.click(function() {
        var ok = false;
        $.ajax({
            type: "POST",
            url: "check_pays.php",
            data: $('#payment').serialize(),
            success: function (data) {
                console.log(data);
 
                if(data == "test")
                    ok = true;
                else {
                    ok = false;
                    return false;
                }
            }
        });
        if(ok == true){
            $('#payment').submit();
            return true;
        }});
</script>
Он должен отправить эти данные в check_pays.php + на .
На он отправляет как надо, но вот на check_pays.php нет.
В чём именно проблемы:
1) В check_pays.php стоит условие(запись в базе данных), если всё записалось в базе должно быть надпись на страничке "test" если нет "no".
Если появилась надпись "test" то форма должна отправляться на , если другая информация, кнопка не должна работать, но кнопка в любом случай работает и отправляет данные на .
2) В check_pays.php не работают переменные вида $_POST['total'] (данное значение в базе не добавлялась, обычные переменные нормально добавлялись)

Спасибо заранее
Ответ:
Сообщение от HOMEP13
Вот здесь
Javascript
1
data: $('#payment').serialize(),
выбирается элемент с id=payment, а я такого не вижу. Есть элемент с именем payment, но тогда будет по другому
Javascript
1
data: $('form[name=payment]').serialize(),
Что бы кнопка не отправляла нужно так
Javascript
1
2
3
btnInk.click(function(event) {
event.PreventDefault();
....
Спасибо за такое решение но я вчера нашел тоже похожее решение)
Но вот первая проблема не исправилась, даже с вашим кодом(или я его не правильно установил), проверьте пожалуйста:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var btnInk = $('#submitIk');
btnInk.click(function() {
    var ok = false;
    $.ajax({
        type: "POST",
        url: "check_pays.php",
        data: ({ik_am: $("#ik_am").val()}),
        //data: $('#payment').serialize(),
        success: function (data) {
            //console.log(data);
 
            if(data == "test") {
                ok = true;
            }
            else {
                ok = false;
            }
        }
    });
    if(ok == false){
        event.PreventDefault();
    }
});
Вопрос: Как подружить две переменные, где одна из ajax?

Здравствуйте. Ситуация такова.

Есть php файл, который обращается к бд и выводит значение таблицы. Открыв свой php файл я увижу ["2016-12-03"], ["2016-11-25"],

На сайте у меня ajax функция, которая принимает это php сообщение:
Javascript
1
2
3
4
5
6
7
8
9
$.ajax({
                type: "POST",
                url: "/php.php",
                data: $('#ajaxlogin').serialize(),
                success: function(msg){
                $('.a-info').text('Успешное подключение')
                $('.brondate').text(msg);
                }
            });
div brondate без проблем принимает вид: ["2016-12-03"], ["2016-11-25"],

Ниже у меня идёт код календаря с диапазоном дат
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var array = ["2016-11-20","2016-11-25","2016-12-03",]
 
  $('#date_range').datepicker({
    range: 'period', // режим - выбор периода
    numberOfMonths: 2,
    dateFormat: "yy-mm-dd",
    minDate: 0,
    onSelect: function(dateText, inst, extensionRange) {
        // extensionRange - объект расширения
      $('[name=startDate]').val(extensionRange.startDateText);
      $('[name=endDate]').val(extensionRange.endDateText);
    }
  });
// затемнение дат
$('#date_range').datepicker('option','beforeShowDay',
     function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [ array.indexOf(string) == -1 ,"", null ]
    }
);
Обратите внимание на "затемнение дат". В календаре даты, которые указаны в array, неактивны. Я хотел эту "неактивность" брать из бд, но array не хочет принимать значение msg от php
Как подружить array с сообщением из php? Я попытался сделать так
Javascript
1
2
3
4
var bron = msg;
                }
            });
var array = bron
Но ничего не заработало.
Ответ: drkrol, и вновь, и вновь, и опять по новой новички будут допускать эту ошибку.
Дело в том, что ajax-запросы по умолчанию асинхронны. Это означает, что сценарий, грубо говоря, разделится на 2 независимых сценария, которые будут выполняться параллельно. То есть:
Javascript
1
2
3
4
5
6
7
$.ajax({
   ...
   success: function(response) {
      // Код_1
   }
});
// Код_2
Код_1 и Код_2 будут выполняться параллельно друг другу. Поскольку Код_1 начнет выполняться только после ответа от сервера (а это занимает какое-то время), то Код_2 вероятнее всего будет выполнен раньше, чем Код_1.
Короче говоря, в тот момент, когда вы работаете с array в блоке "затемнение дат", массиву еще не присвоено значение из msg. Все действия, которые необходимо выполнить только после ответа от сервера необходимо располагать в callback-функции ajax-запроса.
Примерно так:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$.ajax({
                type: "POST",
                url: "/php.php",
                data: $('#ajaxlogin').serialize(),
                success: function(msg){
                $('.a-info').text('Успешное подключение')
                $('.brondate').text(msg);
                array = msg; // Присвоение условное. Заполните массив корректно из строки, полученной с сервера.
                setupCalendar(); // Вот теперь мы можем переходить к "затемнению дат"
                }
            });
 
function setupCalendar() {
   $('#date_range').datepicker('option','beforeShowDay',
     function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [ array.indexOf(string) == -1 ,"", null ]
    }
   );
}
Вопрос: Как в $.ajax на jquery сделать return?

Добрый день,

Такая проблема,

Не срабатывает return из блока success в $.ajax

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$('.link').click(function(e)
{
   e.preventDefault;
   var bool;
$.ajax({
     ...
    success : function(data)
   {
         if(data == 'true') 
            bool = true;
         else
         {
             bool = false;
             return false;
         }
   }
     ...
})
alert(bool);
})


К сожалению не отрабатывается ни return, ни присвоение переменной из области ajax

Помогите советом!
Ответ: Благодарю, но тут дело не в логике, а в доступе к переменной, вот тут ответ есть :