За последние 24 часа нас посетили 49902 программиста и 1757 роботов. Сейчас ищут 933 программиста ...

Отправка значения переменной из js в php ajax'ом

Тема в разделе "PHP для новичков", создана пользователем Dark19, 15 май 2014.

  1. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Здравствуйте, не могу понять почему в массиве $_POST нет переменной distance.
    Передаю переменную из js в php ajax'ом:

    Код (Text):
    1.                                
    2. var distance = 2;
    3.                              $.ajax({
    4.                                     url: "index.php",
    5.                                     type : "POST",
    6.                                     data : {distance:distance},
    7.                                     success: function (responseText) {
    8.                                         alert(responseText);
    9.                                     }});
    Вывожу в index.php:
    Код (Text):
    1. echo $_POST['distance'];
    а ничего не выводится, обьясните почему? как сделать правильно?
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    $(document).ready есть?
    Код (PHP):
    1. var distance = 2;
    2. $(document).ready(function(){
    3.     $.ajax({
    4.         url: "index.php",
    5.         type: "POST",
    6.         data: {distance:distance},
    7.         success: function(responseText){
    8.             alert(responseText);
    9.         }
    10.     });
    11. });
     
  3. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    есть, ответ от сервера есть алерт выводиться, а вот в пхп не передает значение
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Всплывает пустое окно что ли? У меня 2 показывает.
     
  5. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    не, всплывает код странички, но мне нужно значение переменной distance в php передать
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Какой именно код какой странички? Вот это: echo $_POST['distance'];?
     
  7. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Вот мой код:
    Код (Text):
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5.     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    6.     <title>DB</title>
    7. </head>
    8. <body>
    9.  
    10. <script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    11.     <style>
    12.         html, body, #map {
    13.             width: 100%;
    14.             height: 100%;
    15.             padding: 0;
    16.             margin: 0;
    17.         }
    18.     </style>
    19.  
    20.     <script type="text/javascript">
    21.         function init() {
    22.             var myMap = new ymaps.Map('map', {
    23.                     center: [50.340512, 30.534661],
    24.                     zoom: 10,
    25.                     type: 'yandex#map',
    26.                     behaviors: ['scrollZoom', 'drag'],
    27.                     controls: []
    28.  
    29.                 },{restrictMapArea:true,dblClickZoom:false}),
    30.  
    31.                 searchStartPoint = new ymaps.control.SearchControl({
    32.                     options: {
    33.                         useMapBounds: true,
    34.                         noPlacemark: true,
    35.                         noPopup: true,
    36.                         placeholderContent: 'Адрес начальной точки',
    37.                         size: 'large'
    38.                     }
    39.                 }),
    40.                 searchFinishPoint = new ymaps.control.SearchControl({
    41.                     options: {
    42.                         useMapBounds: true,
    43.                         noCentering: true,
    44.                         noPopup: true,
    45.                         noPlacemark: true,
    46.                         placeholderContent: 'Адрес конечной точки',
    47.                         size: 'large',
    48.                         float: 'none',
    49.                         position: { left: 10, top: 44 }
    50.                     }
    51.                 }),
    52.                 calculator = new DeliveryCalculator(myMap, myMap.getCenter());
    53.             myMap.behaviors.disable(['scrollZoom']);
    54.             myMap.controls.add(searchStartPoint);
    55.             myMap.controls.add(searchFinishPoint);
    56.  
    57.             searchStartPoint.events.add('resultselect', function (e) {
    58.                 var results = searchStartPoint.getResultsArray(),
    59.                     selected = e.get('index'),
    60.                     point = results[selected].geometry.getCoordinates();
    61.  
    62.                 calculator.setStartPoint(point);
    63.             })
    64.                 .add('load', function (event) {
    65.                     // По полю skip определяем, что это не дозагрузка данных.
    66.                     // По getRusultsCount определяем, что есть хотя бы 1 результат.
    67.                     if (!event.get('skip') && searchStartPoint.getResultsCount()) {
    68.                         searchStartPoint.showResult(0);
    69.                     }
    70.                 });
    71.  
    72.             searchFinishPoint.events.add('resultselect', function (e) {
    73.                 var results = searchFinishPoint.getResultsArray(),
    74.                     selected = e.get('index'),
    75.                     point = results[selected].geometry.getCoordinates();
    76.  
    77.                 calculator.setFinishPoint(point);
    78.             })
    79.                 .add('load', function (event) {
    80.                     // По полю skip определяем, что это не дозагрузка данных.
    81.                     // По getRusultsCount определяем, что есть хотя бы 1 результат.
    82.                     if (!event.get('skip') && searchFinishPoint.getResultsCount()) {
    83.                         searchFinishPoint.showResult(0);
    84.                     }
    85.                 });
    86.         }
    87.  
    88.         function DeliveryCalculator(map, finish) {
    89.             this._map = map;
    90.             this._start = null;
    91.             this._route = null;
    92.  
    93.             map.events.add('click', this._onClick, this);
    94.         }
    95.  
    96.         var ptp = DeliveryCalculator.prototype;
    97.  
    98.         ptp._onClick= function (e) {
    99.             if (this._start) {
    100.                 this.setFinishPoint(e.get('coords'));
    101.             } else {
    102.                 this.setStartPoint(e.get('coords'));
    103.             }
    104.         };
    105.  
    106.         ptp._onDragEnd = function (e) {
    107.             this.getDirection();
    108.         }
    109.  
    110.         ptp.getDirection = function () {
    111.             if(this._route) {
    112.                 this._map.geoObjects.remove(this._route);
    113.             }
    114.  
    115.             if (this._start && this._finish) {
    116.                 var self = this,
    117.                     start = this._start.geometry.getCoordinates(),
    118.                     finish = this._finish.geometry.getCoordinates();
    119.  
    120.                 ymaps.geocode(start, { results: 1 })
    121.                     .then(function (geocode) {
    122.                         var address = geocode.geoObjects.get(0) &&
    123.                             geocode.geoObjects.get(0).properties.get('balloonContentBody') || '';
    124.  
    125.                         ymaps.route([start, finish])
    126.                             .then(function (router) {
    127.                                 var distance = Math.round(router.getLength() / 1000),
    128.                                     message = '<span>Расстояние: ' + distance + 'км.</span><br/>' +
    129.                                         '<span style="font-weight: bold; font-style: italic">Стоимость доставки: %sр.</span>';
    130.  
    131.                                 self._route = router.getPaths();
    132.  
    133.  
    134.                                 self._route.options.set({ strokeWidth: 5, strokeColor: '0000ffff', opacity: 0.5 });
    135.                                 self._map.geoObjects.add(self._route);
    136.                                 self._start.properties.set('balloonContentBody', address + message.replace('%s', self.calculate(distance)));
    137.                                 $.ajax({
    138.                                     url: "http://geo/index.php",
    139.                                     type : "POST",
    140.                                     data : {distance:distance},
    141.                                     success: function (responseText) {
    142.                                         alert(distance);
    143.                                     },error : function(XMLHttpRequest, textStatus, errorThrown) {}
    144.                                 });
    145.                             });
    146.                     });
    147.                 self._map.setBounds(self._map.geoObjects.getBounds())
    148.             }
    149.         };
    150.  
    151.         ptp.setStartPoint = function (position) {
    152.             if(this._start) {
    153.                 this._start.geometry.setCoordinates(position);
    154.             }
    155.             else {
    156.                 this._start = new ymaps.Placemark(position, { iconContent: 'А' }, { draggable: true });
    157.                 this._start.events.add('dragend', this._onDragEnd, this);
    158.                 this._map.geoObjects.add(this._start);
    159.             }
    160.             if (this._finish) {
    161.                 this.getDirection();
    162.             }
    163.         };
    164.  
    165.         ptp.setFinishPoint = function (position) {
    166.             if(this._finish) {
    167.                 this._finish.geometry.setCoordinates(position);
    168.             }
    169.             else {
    170.                 this._finish = new ymaps.Placemark(position, { iconContent: 'Б' }, { draggable: true });
    171.                 this._finish.events.add('dragend', this._onDragEnd, this);
    172.                 this._map.geoObjects.add(this._finish);
    173.             }
    174.             if (this._start) {
    175.                 this.getDirection();
    176.             }
    177.         };
    178.  
    179.         ptp.calculate = function (len) {
    180.             // Константы.
    181.             var DELIVERY_TARIF = 20,
    182.                 MINIMUM_COST = 500;
    183.  
    184.             return Math.max(len * DELIVERY_TARIF, MINIMUM_COST);
    185.         };
    186.  
    187.         ymaps.ready(init);
    188.  
    189.  
    190.     </script>
    191.     <div id="map"></div>
    192.  
    193.  
    194.  
    195.  
    196.  
    197.  
    198. <form method="post">
    199.     <select name="first">
    200.         <option value="1">Zhitomir</option>
    201.         <option value="2">Kyiv</option>
    202.     </select>
    203.     <select name="second">
    204.         <option value="1">Odessa</option>
    205.         <option value="2">Kharkov</option>
    206.     </select>
    207.     <input type="text" name="ves"/>
    208.     <button type="submit">OK</button>
    209. </form>
    210.  
    211. <?php
    212.  
    213. $connection = mysql_connect("localhost", "dark19", "Ctgjh192");
    214. $db = mysql_select_db("geo");
    215. if (!$connection || !$db){
    216.     exit(mysql_error());
    217. }
    218. else {
    219.    // echo("Yes");
    220. }
    221.  
    222. $result = mysql_query(" SELECT title, weight, congestion FROM auto ");
    223. mysql_close();
    224.  
    225. $ves = $_POST["ves"];
    226. $num=0;
    227. while ($row = mysql_fetch_array($result)){
    228.     if(($row['weight']-$row['congestion']) - $ves > 0)
    229.     {
    230.         $razn = ($row['weight'] - $row['congestion']) - $ves;
    231.         $auto = $row['title'];
    232.         $machine[$num] = $auto;
    233.         $machine_weight[$num] = $row['weight'];
    234.         $machine_congestion[$num] = $row['congestion'];
    235.         $num++;
    236.     }
    237. }
    238. echo $_POST['distance'];
    239.  
    240.  
    241. echo $machine[0].'<br/>Грузоподьемность = '.$machine_weight[0].'<br/>Загружено = '.$machine_congestion[0];
    242. if ($_POST["first"] == 1 && $_POST["second"] == 1)
    243.     echo "<br/>550km";
    244. if ($_POST["first"] == 1 && $_POST["second"] == 2)
    245.     echo "<br/>400km";
    246. if ($_POST["first"] == 2 && $_POST["second"] == 1)
    247.     echo "<br/>400km";
    248. if ($_POST["first"] == 2 && $_POST["second"] == 2)
    249.     echo "<br/>250km";
    250.  
    251.  
    252.  
    253.  
    254. /*
    255.  
    256. $array_size = 2;
    257.  
    258. // Генерация массива случайных чисел $array_size
    259. for ($x = 0; $x < $array_size; $x++)
    260.     $ran[$x] = rand(0, 500);
    261.  
    262. // Метод пузырьковой сортировки
    263.  
    264. for ($x = 0; $x < $array_size; $x++) {
    265.     for ($y = 0; $y < $array_size; $y++) {
    266.         if ($ran[$x] < $ran[$y]) {
    267.             $hold = $ran[$x];
    268.             $ran[$x] = $ran[$y];
    269.             $ran[$y] = $hold;
    270.         }
    271.     }
    272. }
    273.  
    274. for ($x = 0; $x < $array_size; $x++)
    275.     print $ran[$x] . "<br>";
    276. */
    277. ?>
    278. </body>
    279. </html>
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Всё равно не понятно. Я просил "какой именно код какой странички" выводится? Ты отвечаешь "вот мой код". Выводится именно код этой страницы? Спрашиваю потому, что подумать можно что угодно, если не отвечаешь развернуто.
    Если выводится код этой страницы, значит, ты и выводишь код этой страницы. А что ты хотел сделать?

    Если со страницы index.php делаешь AJAX запрос к странице index.php, то получишь то, что выведет эта index.php со всем встроенным JS кодом и HTML версткой, всё правильно.

    $.ajax({url: "index.php",... делает запрос, index.php отрабатывает и отдаёт документ. Функция success: function (responseText) берёт этот документ и выводит через alert.
     
  9. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Да, выводиться код этой странички, но мне нужно с переменной distance в js передать значение в массив $_POST в php или в переменную какую то, как такое сделать без перезагрузки страницы?
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    чувак, ты готов сделать это сам с нашей помощью, или тебе надо именно готовое решение?
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Код (Text):
    1. var distance = 2;
    2. $(document).ready(function(){
    3.     $.ajax({
    4.         url: "index.php",
    5.         type: "POST",
    6.         data: "distance="+distance,
    7.         success: function(responseText){
    8.             alert(responseText);
    9.         }
    10.     });
    11. });
     
  12. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Включаю телепатию. По-моему, ты хочешь вывести значение переменной где-нибудь в документе. Ну тогда AJAX тут совсем не нужен.
    Вот рассчитала у тебя функция function (router) расстояние и далее вместо $.ajax({ нужно что-то вроде $('#out').text(distance); написать. Тогда в HTML элемент с id="out" выведется значение переменной.
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А моя телепатия подсказывает, что он просто хочет, чтобы в скрипт улетело нужное значение. И что он просто ее ищет он его где-то в конце верстки, которая прилетает в ответ от сервера. Так вот отлаживает, что поделать.
     
  14. Dark19

    Dark19 Активный пользователь

    С нами с:
    10 май 2014
    Сообщения:
    51
    Симпатии:
    0
    Совершенно верно, мне нужно чтобы в скрипт php пришло значение переменной distance из js, так вот как мне туда его отправить без перезагрузки страницы?
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я ведь написал код. Ищи мой пост выше.

    И в index.php сделай условие, что если $_POST не пустой, то не выводить остальную страницу. Удобнее будет.
     
  16. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Отсылай в другой скрипт, не в index.php, а например, в ajax.php с таким содержимым:
    ajax.php
    Код (PHP):
    1. <?php
    2. echo $_POST['distance'];