|
|
|
|
|
для: sasha12342
(25.04.2016 в 15:01)
| | Сюда, а Денвер выбросить, умер он уже давно. | |
|
|
|
|
|
|
|
для: confirm
(25.04.2016 в 06:08)
| | Денвер, версия: Денвер-3 2010-11-07 | |
|
|
|
|
|
|
|
для: sasha12342
(24.04.2016 в 23:13)
| | На чем вы тестируете скрипты? | |
|
|
|
|
|
|
|
для: confirm
(24.04.2016 в 06:20)
| | Спасибо за примеры, но они у меня не работают. Двух индексных файлов я нигде не использую. Здесь-же я привел их в пример потому что мне кажется странным, что один файл обработчик, получает один и тот-же запрос(строка которую отдают индексные файлы) ведет себя по разному в зависимости от того с какого файла прилетает этот запрос.
Что касается примеров выше, то в первом случае ничего не происходит после нажатия(если по умолчанию ставлю запись в #response, то после отправки текст просто исчезает). Во втором случае просто игнорируется php код. После добавления записей в файл .htaccess ничего не изменилось. | |
|
|
|
|
|
|
|
для: sasha12342
(22.04.2016 в 23:31)
| | А вы можете пояснить зачем вам коллекция индексных файлов?
index.* - это индексный файл по умолчанию, который прописан в конфигурации сервера, и если у вас .php, то кем-то набранный .html будет все таки перенаправлен на .php. Если на сервере бардак, что вряд ли, то для решения такой проблемы есть .htaccess.
Трудно представить, чтобы у сайта с динамическим содержанием индексный файл был чисто html, а из php только какой-то заголовок, который в общем то в данном случае и не нужен.
Но чтобы наконец-то вы поняли логику работы асинхронного обмена клиент->сервер показываю простые примеры, хотя данное по своей логике ни чем не отличается от примера "Скачать файл".
В первом случае пусть это будет чистый html, который отдает форму и содержит сценарий клиента, а обработка асинхронного запроса, это отдельный файл.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
var frm = $('#myform').submit(function(e) {
e.preventDefault();
$.post('send.php', frm.serialize(), function(d) {
if(!!d) $('#response').html(d)
})
})
});
</script>
</head>
<body>
<p>Server response</p>
<pre id="response"></pre>
<form id="myform">
<input name="fld1" value="5" />
<input name="fld2" value="12" />
<input name="fld3" value="55" />
<button>Send</button>
</form>
</body>
</html>
|
Примечание - serialize(), а не var input = this.elements, i = input.length, array = []; while(i--)... и прочая хрень в данном случае совсем не нужная. Метод асинхронного запроса взят упрощенный, собственно и вы используете $.ajax не понятно с какой целью. Но в данном случае не важен метод. О всех ajax-методах JQ читать тут.
Файл обработчик send.php простой - он просто возвращает содержимое $_POST.
Запустите, проверьте - все работает и лишнего не возвращает?
А теперь изменим структуру кода - запрос клиента будет к текущей странице, то есть html, которая содержит и форму, и клиентский сценарий. Файл обработчик будет подключаться по условию запроса клиента, и в данном случае php-код размещен в самом начале файла, а после окончания работы файла обработчика находится инструкция выхода, которая по умолчанию ремирована. Адрес асинхронного запроса изменяем на location, поэтому исполняя пример можете давать файлу .html любое имя:
<?php
if($_POST) {
include 'send.php';
//exit;
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
var frm = $('#myform').submit(function(e) {
e.preventDefault();
$.post(location, frm.serialize(), function(d) {
if(!!d) $('#response').html(d)
})
})
});
</script>
</head>
<body>
<p>Server response</p>
<pre id="response"></pre>
<form id="myform">
<input name="fld1" value="5" />
<input name="fld2" value="12" />
<input name="fld3" value="55" />
<button>Send</button>
</form>
</body>
</html>
|
Выполните теперь - вместе с содержимым $_POST сервер возвращает и код страницы. Уберите ремирование у exit. А теперь все работает как положено.
Вот и вся соль. Если же и данный пример будет не выполняться, и сервер возвращает не просто и то, и другое, а код страницы как есть, включая и строки php-кода, то причина этого банальна - не разрешено выполнение php-кода в файлах html (по умолчанию, это не исполняемый файл). Эта проблема также решается через .htaccess, добавьте в него строки:
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
|
PS. К чему у вас biblioteka.js не понятно, хотя я не смотрел код во вложении, может там подключение. Но не надо и этим заниматься - библиотеку jQuery лучше подключать с ресурсов Google, в этом случае большая вероятность того, что у клиента она уже есть в кеше и закачивать ее опять не потребуется. | |
|
|
|
|
 2.8 Кб |
|
|
для: confirm
(22.04.2016 в 12:11)
| | Ладно, делаю следующим образом:
Имеем в корне следующие файлы:
obrabotchic.php - файл обработчик (его содержимое выложено выше);
index.php
<?php
header('Content-Type: text/html; charset=utf-8');
setlocale(LC_ALL, 'ru_RU.65001', 'rus_RUS.65001', 'Russian_Russia. 65001', 'russian');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="keywords" content="">
<meta name="description" content="">
<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$('.table_calc').change(function() {
$('.len').each(function(){
var input = this.elements, i = input.length, array = [];
while(i--){
str_1=$(input[i]).val();
array.push("pol"+i+"="+str_1.replace(/[&]+/g,'.'));
}
$.ajax({
type: "POST",
url: "obrabotchic.php",
data: {post_z: array.reverse().join()},
dataType: "html",
cache: false,
success: function(data) {
$('#echo_change_text').html(data);
}
});
});
});
});
</script>
</head>
<body>
<div style='border: 1px solid green; overflow:auto;'>
<div id='echo_change_text'>
<p align='center'><b>Итого: <font color='green'>0</font> рублей</b></p>
</div>
</div>
<form action="" method="POST" id='len' class='len'>
<table class='table_calc' cellspacing="1" id='otvet'>
<tr class='tab_tr'>
<td class='tab_td1'>$table_tr1</td>
<td class='tab_td2'><input class='input_change' name='pol' type='text' size='2' value='0'>$table_tr2</td>
<td class='tab_td5'>$table_tr3</td>
</tr>
<tr class='tab_tr'>
<td class='tab_td1'>$table_tr1</td>
<td class='tab_td2'><input class='input_change' name='pol' type='text' size='2' value='0'>$table_tr2</td>
<td class='tab_td5'>$table_tr3</td>
</tr>
<tr class='tab_tr'>
<td class='tab_td1'>$table_tr1</td>
<td class='tab_td2'><input class='input_change' name='pol' type='text' size='2' value='0'>$table_tr2</td>
<td class='tab_td5'>$table_tr3</td>
</tr>
<tr class='tab_tr'>
<td class='tab_td1'>$table_tr1</td>
<td class='tab_td2'><input class='input_change' name='pol' type='text' size='2' value='0'>$table_tr2</td>
<td class='tab_td5'>$table_tr3</td>
</tr>
</table>
</form>
</body>
</html>
|
index.html - код аналогичен, за исключением <?php header...
biblioteka.js - библиотека Jquery
Когда я меняю значения полей в файле index.php то результат возвращается ожидаемый(скрипт в обработчике php срабатывает нормально).
Когда я делаю тоже самое в файле index.html, то в ответ получаю исходный код php обработчика.
Если я на первую строку php обработчика(obrabotchic.php) ставлю то ajax возвращает в html файл исходный код обработчика(вместе с exit("stop");) а файл index.php показывает в блоке вывода ответа надпись: "stop".
Файл обработчик один, но ведет себя по разному, в зависимости от того с какого файла приходит запрос, а запрос одинаков с обеих файлах. Как так может быть?
Файлы прикрепил. | |
|
|
|
|
|
|
|
для: indexer
(22.04.2016 в 12:02)
| | А кто сказал что это ненависть?
Каков коммент, таков и ответ, а он глуп до костей мозгов, просто вы написали всякой херни, лишь бы языком ляпнуть. Я бы вообще прошел мимо так как в вашем комменте ничего полезного ни для кого нет, если бы не снисхождение ко мне - простить за резкость..., но как бы она позволительна вам, как же, дока... И смех и грех. Есть что сказать по делу - говорите, нет - не путайтесь под ногами. | |
|
|
|
|
|
|
|
для: confirm
(22.04.2016 в 11:47)
| | от куда столько ненависти? Не все родились со знанием кода, но все когда то умрут. Поэтому какая разница? все же кругом условно-согластно-стандартно. | |
|
|
|
|
|
|
|
для: indexer
(22.04.2016 в 11:08)
| | Не лепи куда попало... Не пороли бы хрени, глядишь и паники бы не было, а было понимание, что не важно что, главное вывод, а ошибки нужно обрабатывать, и уж коли отдавать их клиенту, то не те, что показывает парсер, а то, что можно показать.
Это не резкое высказывание, а глупое. | |
|
|
|
|
|
|
|
для: confirm
(22.04.2016 в 10:13)
| | =) хм... слова не лишены логики и в случае с загрузкой понятно, но почему отдается php код в браузер? Даже если скрипт продолжает работать он может вывалить мусор или ошибки. как он отдает собственный код?
Честно говоря, я не сталкивался с таким поведением, когда при ошибке в коде/логике вываливается весь код php в браузер и не знал, что делать в таком случае. У меня была бы паника, что при хитро составленном запросе можно весь сервер через эту "дырочку" поиметь.
for ts:
exit() конечно важен Но как говорится "не лепи куда попало" и "чем крепче сожмешь, тем сильнее рванет".
Код должен быть кодом, красивым кодом, код надо любить. Это не только к php относится.
а простите не "Бууэ-э-э-э,,, о0, да тут еще и марковка есть, а от куда она тут"?
p/s извините если мое высказывание несколько резко, я не хочу никого обижать этим. | |
|
|
| |
|