Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ajax и переменная (https://javascript.ru/forum/misc/70200-ajax-i-peremennaya.html)

-=Женька=- 18.08.2017 21:46

ajax и переменная
 
Код раньше работал отлично но потом я решил в ajax добавить "&mestor=" + mestor,
и все перестало работать и не могу понять почему.
Подскажите пожалуйста

var btn = document.querySelectorAll("a");
for (var i=0;i<btn.length;i++){
    btn[i].addEventListener("click", function() {
        var mesta = this.getAttribute('data');
        var mestor = 0;
        switch (mesta) {
            case "1":
                var mestor = "Шапка сайта";
             break;
            default:
                var mestor = "Не знаю";
        }
    })
}
 
$("#contactForm").validator().on("submit", function (event) {
    if (event.isDefaultPrevented()) {
        // handle the invalid form...
        formError();
        submitMSG(false, "Пожалуйста заполните все поля");
    } else { 
        // everything looks good!
        event.preventDefault();
        submitForm();
    }
});
function submitForm(){
    // Initiate Variables With Form Content
    var name = $("#name").val();
    var email = $("#email").val();
    var phone = $("#phone").val();
 
    $.ajax({
        type: "POST",
        url: "php/form-process.php",
        data: "name=" + name + "&email=" + email + "&phone=" + phone + "&mestor=" + mestor,
        success : function(text){
            if (text == "success"){
                formSuccess();
            } else {
                formError();
                submitMSG(false,text);
            }
        }
    });
}
 
function formSuccess(){
    $("#contactForm")[0].reset();
    submitMSG(true, "Ваша заявка отправлена ! С вами свяжется наш менеджер")
}
 
function formError(){
    $("#contactForm").removeClass().addClass('shake animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
        $(this).removeClass();
    });
}
 
function submitMSG(valid, msg){
    if(valid){
        var msgClasses = "h3 text-center tada animated text-success";
    } else {
        var msgClasses = "h3 text-center text-danger";
    }
    $("#msgSubmit").removeClass().addClass(msgClasses).text(msg);
}

рони 18.08.2017 21:51

-=Женька=-,
откуда возникнет mestor в строке 36?

-=Женька=- 18.08.2017 21:58

рони,
switch (mesta) { и 8 строка

рони 18.08.2017 22:10

-=Женька=-,
она в клике и останется строка 3

-=Женька=- 18.08.2017 22:12

рони,
Я не на столько хорош в js )
поставил перед ajax mestor = 1; и все заработало но передало 1 : )
Соответственно как я понимаю переменная попадает в функцию пустой.

рони 18.08.2017 22:14

-=Женька=-,
var btn = document.querySelectorAll("a");
var mestor = 0;
for (var i=0;i<btn.length;i++){
    btn[i].addEventListener("click", function() {
        var mesta = this.getAttribute('data');

        switch (mesta) {
            case "1":
                mestor = "Шапка сайта";
             break;
            default:
                mestor = "Не знаю";
        }
    })
}

-=Женька=- 18.08.2017 22:18

рони,
Да но с switch теперь ничего не передается

в php проблемы нет так когда перед ajax написал mestor = 1; единица передалась без проблем

-=Женька=- 18.08.2017 22:23

рони,
Может проблема в клиентской части еще ?
Как работает чудо механизм.
На странице есть 5-10 кнопок и все ведут на модальное окно с одной формой и мне нужно знать на какую кнопку нажал пользователь что-бы попасть на форму и заполнить её

рони 18.08.2017 22:23

-=Женька=-,
не понимаю что вы хотите сделать, всё что мог выше.

-=Женька=- 18.08.2017 22:31

рони,
https://codepen.io/lomakin/pen/YxeLPp
При нажатии всегда открывается одна и та же форма. Мне нужно что-бы при отправки данных с формы еще отправлялась переменная mestor и я видел с какой части сайта начали заполнять форму

рони 18.08.2017 22:37

-=Женька=-,
var btn = document.querySelectorAll("a");
var mestor = 0;
for (var i=0;i<btn.length;i++){
    btn[i].addEventListener("click", function(event) {
        event.preventDefault();
        var mesta = this.getAttribute('data');
        switch (mesta) {
            case "1":
                mestor = "Шапка сайта";
                break;
            case "2":
                mestor = "Под шапкой сайта. 1";
                break;
            case "3":
                mestor = "Под шапкой сайта. 2";
                break;
            default:
                mestor = "Не знаю";
        }
  })
}

-=Женька=- 18.08.2017 22:49

рони,
не передается. Но уже все отправляется без ошибок.
может отправлять в кэш, а перед отправкой ajax узнать что там лежит ?

-=Женька=- 18.08.2017 22:52

рони,
По идее если даже со свича ничего не передается то должно идти var mestor = 0;

рони 18.08.2017 23:06

Цитата:

Сообщение от -=Женька=-
не передается. Но уже все отправляется без ошибок.

всё передатся - нажать по любой ссылке - затем нажать Submit
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css"> .modal{
    display: none;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
var btn = document.querySelectorAll("a");
var mestor = 0;
for (var i=0;i<btn.length;i++){
    btn[i].addEventListener("click", function(event) {
        event.preventDefault();
        var mesta = this.getAttribute('data');
        switch (mesta) {
            case "1":
                mestor = "Шапка сайта";
                break;
            case "2":
                mestor = "Под шапкой сайта. 1";
                break;
            case "3":
                mestor = "Под шапкой сайта. 2";
                break;
            default:
                mestor = "Не знаю";
        }
     $(".modal").show()
  })
}

$("#contactForm").on("submit", function (event) {
  event.preventDefault();
  alert(mestor);
  $(".modal").hide();

});


});
  </script>
</head>

<body>
<a href="#" class="btn-background" data-toggle="modal" data-target=".modal" data="1">Кнопка ведет на форму</a>
 <a href="#" class="btn-background" data-toggle="modal" data-target=".modal" data="2">Кнопка ведет на форму</a>
 <a href="#" class="btn-background" data-toggle="modal" data-target=".modal" data="3">Кнопка ведет на форму</a>

<div class="modal">
 <!-- Form starts -->
 <form id="contactForm" action="" method="POST" >
 <fieldset>
 <legend>Contact Form</legend>
   <table width="100%" border="0">
     <tr>
       <td width="120"><label for="name">Name</label></td>
       <td><input name="name" id="name" size="30" /></td>
     </tr>
     <tr>
       <td width="120"><label for="email">E-mail</label></td>
       <td><input name="email" id="email" size="30" /></td>
     </tr>
     <tr>
       <td width="120" valign="top"><label for="comments">Comments</label></td>
       <td><textarea name="comments" id="comments" rows="5" cols="40"></textarea></td>
     </tr>
     <tr>
       <td>
       </td>
       <td>
         <input type="submit" name="Submit" value="Submit" />
       </td>
     </tr>
   </table>
 </fieldset>
 </form>
 <!-- Form ends -->
 </div>
</body>
</html>

-=Женька=- 18.08.2017 23:25

рони,
Тогда спасибо )
только не пойму что мешает передаться,а точней дойти до ajax

-=Женька=- 18.08.2017 23:49

рони,
Нашел проблему :) Как всегда все очень глупо.

default:
var = mestor = "Не знаю";

убрал var =

рони 18.08.2017 23:58

-=Женька=-,
ок.

laimas 19.08.2017 04:19

-=Женька=-,
выбрасывать надо это. Каждая форма может иметь скрытое поле содержащее значение позиции. Источником позиции может служить и кнопка отправления формы. Это наряду с другими полями формы и нужно передавать, но не склеивая руками, а достаточно в обработчике отправления $(this).serialize().

Никаких дополнительных скриптов получающих от ссылок данные совсем не требуется.

рони 19.08.2017 10:15

Цитата:

Сообщение от laimas
Каждая форма может иметь скрытое поле

форма одна, модальное окно в котором форма тоже одно, кнопок много для открытия, у ТС всё логично, нужно указать в контексте какой кнопки открыта форма
Цитата:

Сообщение от -=Женька=-
модальное окно с одной формой


laimas 19.08.2017 11:29

рони,
значит надо записывать сразу в элемент формы из data ссылки без switch.

А если выбросить ссылки, заменив их на label с дочерними radio, то и этого не требуется.

рони 19.08.2017 11:38

laimas,
switch конечно можно убрать, если в дата писать нужную информацию, но какой смысл переносить это в элемент формы, чтоб ещё раз извлечь, когда есть готовая переменная?

laimas 19.08.2017 11:40

рони,
я не дописал просто все сразу, теперь дописано. Лишнее это совсем.

рони 19.08.2017 11:42

laimas,
ок.


Часовой пояс GMT +3, время: 00:58.