@lo9o
perl-разработчик с 1999 г.

Проблема с передачей данных через AJAX. Почему не передаются параметры?

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

Работает:
function Pages() {
          $.ajax({  
              type: "POST",  
              url: "/",  
              data: {a:'users',fst:'40',prt:'0'},
              success: function(html){  
              $('#adresbox').html(html);
              }
          });
          $('#adrwnd').modal('show');
          return false;  
      };


Не работает:

function Pages() {
	var datastr = "a:'users',fst:'40',prt:'0'";
          $.ajax({  
              type: "POST",  
              url: "/",  
              data: {datastr},
              success: function(html){  
              $('#adresbox').html(html);
              }
          });
          $('#adrwnd').modal('show');
          return false;  
      };

С чем это может быть связано? Возможно не вижу чего-то совсем очевидного?
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 2
pavel_ataykin
@pavel_ataykin
Верстаю и программирую всякое.
В вашем случае нужно передавать не строку, а FormData. Выглядеть будет примерно так:
function Pages() {
var data = new FormData();
data.append('a', 'users');
data.append('fst', '40');
data.append('prt', '0');

$.ajax({
type: "POST",
url: "/",
data: data,
success: function(html){
$('#adresbox').html(html);
}
});
$('#adrwnd').modal('show');
return false;
};

Для наглядности показал, как добавляются данные в FormData. На сервере обращаться через массив $_POST.
Ответ написан
Комментировать
@lo9o Автор вопроса
perl-разработчик с 1999 г.
Павел, спасибо большое за ответ.
Я решил вот так:
function Pages(act,fst,prt) {

          $.ajax({  
              type: "POST",  
              url: "/",  
	      data: {a: act, fst: fst, prt: prt},
              success: function(html){  
              $('#adresbox').html(html);
              }
          });
          return false;  
      };

Получается проще, но не универсальнее (так как набор параметров может быть разным). Кстати, в Вашем варианте такое решение возможно реализовать, используя цикл.
Я же пытался сделать универсальный подход через replace, превращая переданную строку вида "a=users&fst=40&prt=0" в "a:'users',fst:'40',prt:'0'".
Что меня в ситуации озадачило - это то, что я не пойму в чем разница для AJAX между первым (когда работает) и вторым (когда не работает) вариантами. В этом и был мой вопрос.
Второй Ваш совет ($_POST) у меня работать не будет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы