Здравствуйте, не могу понять почему в массиве $_POST нет переменной distance. Передаю переменную из js в php ajax'ом: Код (Text): var distance = 2; $.ajax({ url: "index.php", type : "POST", data : {distance:distance}, success: function (responseText) { alert(responseText); }}); Вывожу в index.php: Код (Text): echo $_POST['distance']; а ничего не выводится, обьясните почему? как сделать правильно?
$(document).ready есть? Код (PHP): var distance = 2; $(document).ready(function(){ $.ajax({ url: "index.php", type: "POST", data: {distance:distance}, success: function(responseText){ alert(responseText); } }); });
Вот мой код: Код (Text): <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <title>DB</title> </head> <body> <script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script> <style> html, body, #map { width: 100%; height: 100%; padding: 0; margin: 0; } </style> <script type="text/javascript"> function init() { var myMap = new ymaps.Map('map', { center: [50.340512, 30.534661], zoom: 10, type: 'yandex#map', behaviors: ['scrollZoom', 'drag'], controls: [] },{restrictMapArea:true,dblClickZoom:false}), searchStartPoint = new ymaps.control.SearchControl({ options: { useMapBounds: true, noPlacemark: true, noPopup: true, placeholderContent: 'Адрес начальной точки', size: 'large' } }), searchFinishPoint = new ymaps.control.SearchControl({ options: { useMapBounds: true, noCentering: true, noPopup: true, noPlacemark: true, placeholderContent: 'Адрес конечной точки', size: 'large', float: 'none', position: { left: 10, top: 44 } } }), calculator = new DeliveryCalculator(myMap, myMap.getCenter()); myMap.behaviors.disable(['scrollZoom']); myMap.controls.add(searchStartPoint); myMap.controls.add(searchFinishPoint); searchStartPoint.events.add('resultselect', function (e) { var results = searchStartPoint.getResultsArray(), selected = e.get('index'), point = results[selected].geometry.getCoordinates(); calculator.setStartPoint(point); }) .add('load', function (event) { // По полю skip определяем, что это не дозагрузка данных. // По getRusultsCount определяем, что есть хотя бы 1 результат. if (!event.get('skip') && searchStartPoint.getResultsCount()) { searchStartPoint.showResult(0); } }); searchFinishPoint.events.add('resultselect', function (e) { var results = searchFinishPoint.getResultsArray(), selected = e.get('index'), point = results[selected].geometry.getCoordinates(); calculator.setFinishPoint(point); }) .add('load', function (event) { // По полю skip определяем, что это не дозагрузка данных. // По getRusultsCount определяем, что есть хотя бы 1 результат. if (!event.get('skip') && searchFinishPoint.getResultsCount()) { searchFinishPoint.showResult(0); } }); } function DeliveryCalculator(map, finish) { this._map = map; this._start = null; this._route = null; map.events.add('click', this._onClick, this); } var ptp = DeliveryCalculator.prototype; ptp._onClick= function (e) { if (this._start) { this.setFinishPoint(e.get('coords')); } else { this.setStartPoint(e.get('coords')); } }; ptp._onDragEnd = function (e) { this.getDirection(); } ptp.getDirection = function () { if(this._route) { this._map.geoObjects.remove(this._route); } if (this._start && this._finish) { var self = this, start = this._start.geometry.getCoordinates(), finish = this._finish.geometry.getCoordinates(); ymaps.geocode(start, { results: 1 }) .then(function (geocode) { var address = geocode.geoObjects.get(0) && geocode.geoObjects.get(0).properties.get('balloonContentBody') || ''; ymaps.route([start, finish]) .then(function (router) { var distance = Math.round(router.getLength() / 1000), message = '<span>Расстояние: ' + distance + 'км.</span><br/>' + '<span style="font-weight: bold; font-style: italic">Стоимость доставки: %sр.</span>'; self._route = router.getPaths(); self._route.options.set({ strokeWidth: 5, strokeColor: '0000ffff', opacity: 0.5 }); self._map.geoObjects.add(self._route); self._start.properties.set('balloonContentBody', address + message.replace('%s', self.calculate(distance))); $.ajax({ url: "http://geo/index.php", type : "POST", data : {distance:distance}, success: function (responseText) { alert(distance); },error : function(XMLHttpRequest, textStatus, errorThrown) {} }); }); }); self._map.setBounds(self._map.geoObjects.getBounds()) } }; ptp.setStartPoint = function (position) { if(this._start) { this._start.geometry.setCoordinates(position); } else { this._start = new ymaps.Placemark(position, { iconContent: 'А' }, { draggable: true }); this._start.events.add('dragend', this._onDragEnd, this); this._map.geoObjects.add(this._start); } if (this._finish) { this.getDirection(); } }; ptp.setFinishPoint = function (position) { if(this._finish) { this._finish.geometry.setCoordinates(position); } else { this._finish = new ymaps.Placemark(position, { iconContent: 'Б' }, { draggable: true }); this._finish.events.add('dragend', this._onDragEnd, this); this._map.geoObjects.add(this._finish); } if (this._start) { this.getDirection(); } }; ptp.calculate = function (len) { // Константы. var DELIVERY_TARIF = 20, MINIMUM_COST = 500; return Math.max(len * DELIVERY_TARIF, MINIMUM_COST); }; ymaps.ready(init); </script> <div id="map"></div> <form method="post"> <select name="first"> <option value="1">Zhitomir</option> <option value="2">Kyiv</option> </select> <select name="second"> <option value="1">Odessa</option> <option value="2">Kharkov</option> </select> <input type="text" name="ves"/> <button type="submit">OK</button> </form> <?php $connection = mysql_connect("localhost", "dark19", "Ctgjh192"); $db = mysql_select_db("geo"); if (!$connection || !$db){ exit(mysql_error()); } else { // echo("Yes"); } $result = mysql_query(" SELECT title, weight, congestion FROM auto "); mysql_close(); $ves = $_POST["ves"]; $num=0; while ($row = mysql_fetch_array($result)){ if(($row['weight']-$row['congestion']) - $ves > 0) { $razn = ($row['weight'] - $row['congestion']) - $ves; $auto = $row['title']; $machine[$num] = $auto; $machine_weight[$num] = $row['weight']; $machine_congestion[$num] = $row['congestion']; $num++; } } echo $_POST['distance']; echo $machine[0].'<br/>Грузоподьемность = '.$machine_weight[0].'<br/>Загружено = '.$machine_congestion[0]; if ($_POST["first"] == 1 && $_POST["second"] == 1) echo "<br/>550km"; if ($_POST["first"] == 1 && $_POST["second"] == 2) echo "<br/>400km"; if ($_POST["first"] == 2 && $_POST["second"] == 1) echo "<br/>400km"; if ($_POST["first"] == 2 && $_POST["second"] == 2) echo "<br/>250km"; /* $array_size = 2; // Генерация массива случайных чисел $array_size for ($x = 0; $x < $array_size; $x++) $ran[$x] = rand(0, 500); // Метод пузырьковой сортировки for ($x = 0; $x < $array_size; $x++) { for ($y = 0; $y < $array_size; $y++) { if ($ran[$x] < $ran[$y]) { $hold = $ran[$x]; $ran[$x] = $ran[$y]; $ran[$y] = $hold; } } } for ($x = 0; $x < $array_size; $x++) print $ran[$x] . "<br>"; */ ?> </body> </html>
Всё равно не понятно. Я просил "какой именно код какой странички" выводится? Ты отвечаешь "вот мой код". Выводится именно код этой страницы? Спрашиваю потому, что подумать можно что угодно, если не отвечаешь развернуто. Если выводится код этой страницы, значит, ты и выводишь код этой страницы. А что ты хотел сделать? Если со страницы index.php делаешь AJAX запрос к странице index.php, то получишь то, что выведет эта index.php со всем встроенным JS кодом и HTML версткой, всё правильно. $.ajax({url: "index.php",... делает запрос, index.php отрабатывает и отдаёт документ. Функция success: function (responseText) берёт этот документ и выводит через alert.
Да, выводиться код этой странички, но мне нужно с переменной distance в js передать значение в массив $_POST в php или в переменную какую то, как такое сделать без перезагрузки страницы?
Код (Text): var distance = 2; $(document).ready(function(){ $.ajax({ url: "index.php", type: "POST", data: "distance="+distance, success: function(responseText){ alert(responseText); } }); });
Включаю телепатию. По-моему, ты хочешь вывести значение переменной где-нибудь в документе. Ну тогда AJAX тут совсем не нужен. Вот рассчитала у тебя функция function (router) расстояние и далее вместо $.ajax({ нужно что-то вроде $('#out').text(distance); написать. Тогда в HTML элемент с id="out" выведется значение переменной.
А моя телепатия подсказывает, что он просто хочет, чтобы в скрипт улетело нужное значение. И что он просто ее ищет он его где-то в конце верстки, которая прилетает в ответ от сервера. Так вот отлаживает, что поделать.
Совершенно верно, мне нужно чтобы в скрипт php пришло значение переменной distance из js, так вот как мне туда его отправить без перезагрузки страницы?
Я ведь написал код. Ищи мой пост выше. И в index.php сделай условие, что если $_POST не пустой, то не выводить остальную страницу. Удобнее будет.
Отсылай в другой скрипт, не в index.php, а например, в ajax.php с таким содержимым: ajax.php Код (PHP): <?php echo $_POST['distance'];