Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: AJAX в windows phone
 
 автор: xxxZIKxxx   (05.04.2017 в 09:17)   письмо автору
 
 

Доброго времени суток! Ситуация такая:
Человек нажимает кнопку, происходит переход через AJAX на страницу выполнения скрипта, от туда, когда скрипт применяет данные, редиктом через header('location'); отсылает на прежню страницу, где была нажата кнопка. В свою очередь, из ответа AJAX, выбираются данные по которым обновляются пара блоков на страничке, в общем происходит вполне стандартный запрос без перезагрузки страницы.
Всё везде работает кроме windows phone 8.1. Покопавшись обнаружил что не происходит перенаправленные со страницы скрипта. Если сделать два запроса, первый простой не видимый переход на скрипт, а второй уже не на скрипт а непосредственно на страницу сайта, от туда прекрасно выбирает и обновляет все блоки.
Подскажите как на windows phone 8.1 сделать чтоб AJAX возвращал данные не со страницы скрипта до редикта, а после, со страницы сайта на которую был редикт?

  Ответить  
 
 автор: confirm   (05.04.2017 в 17:43)   письмо автору
 
   для: xxxZIKxxx   (05.04.2017 в 09:17)
 

Столько тумана в описании, что не понять.
Если клиент обменивается с сервером асинхронными запросами, то header('location'); никоим образом не будет переходом, содержимое по адресу перехода будет отдано как ответ клиенту.

  Ответить  
 
 автор: xxxZIKxxx   (05.04.2017 в 18:30)   письмо автору
 
   для: confirm   (05.04.2017 в 17:43)
 

Так на виндовс фоне и отдаёт содержимое с файла скрипта. А на всех остальных устройствах происходит переход, и отдаётся конечная страница (андройд, айфон и комповский виндовс).
Насчёт тумана, наверно как-то не грамотно объяснил, но суть ты понял правильно)) Скрипт выполняется не на самой странице, там только кнопка, по нажатию на неё происходит переход на файл скрипта, он всё делает, затем перенаправляет назад на страницу где был вызван, ну, это всё невидимо через асинхронный запрос происходит, затем запрос возвращает страницу с уже произведённым изменением, и пользователю js обновляет блоки, к примеру корзина, нажал купить на товар, в корзине появился товар, в данном случае скрипт добавляет товар, а из AJAX ответа выдирается и обновляется блок с корзиной...

  Ответить  
 
 автор: confirm   (06.04.2017 в 17:03)   письмо автору
 
   для: xxxZIKxxx   (05.04.2017 в 18:30)
 

Не путайте мух с котлетами. Если нет асинхронного запроса, то передача заголовка Location сервером будет означать для браузера переход по указанному адресу - перезагрузка страницы. В случае асинхронного запроса страница никак не может быть перезагружена, ибо ответ сервера получит ни она, а объект XMLHttpRequest - Location в данном случае, контент, который будет возвращен.

Что касаемо страницы с товарами и добавления их в корзину, то в рамках асинхронных запросов какие-то переходы ради добавления товара в корзину и близко не нужны.

  Ответить  
 
 автор: xxxZIKxxx   (06.04.2017 в 23:30)   письмо автору
 
   для: confirm   (06.04.2017 в 17:03)
 

Спасибо Вам за ответы! Про корзину и товары я просто в виде примера написал.
Чтоб не быть голословным вот простейший пример:
Мы находимся на странице info.php и жмём кнопку запуска скрипта, срабатывает onclick и запускает функцию:

$.get('1.php', function(a) {
$('#id_01').html($(a).find('#id_01').html());
});

А вот сам файл скрипта 1.php:

$_SESSION[test] = 'test';
exit(header('Location: 'info.php'));

Так вот всё берёт инфу с файла info.php, и только виндовс мобайл берёт инфу с 1.php, не знаю как в 10 мобильной винде, но в 8 точно так происходит...
Как сделать чтоб в на windows phone всё работало так же как и везде?)

  Ответить  
 
 автор: confirm   (07.04.2017 в 10:58)   письмо автору
 
   для: xxxZIKxxx   (06.04.2017 в 23:30)
 

Как об стенку горохом. header('Location: 'info.php') вкупе с $.get('1.php', ... полнейшая глупость. Нежен переход, значит клиент должен window.location.href = 'info.php'.

$('#id_01').html($(a).find('#id_01').html()); - это тоже пустое, читайте о методах jQuery.

  Ответить  
 
 автор: xxxZIKxxx   (07.04.2017 в 19:34)   письмо автору
 
   для: confirm   (07.04.2017 в 10:58)
 

Да вопрос не в том как это правильно реализовать. Я дал простейший пример исключительно для примера, вопрос в том почему это работает везде, а на мобильной винде не работает, и как сделать чтоб именно такой подход работал. И кстати если чел вручную пропишет путь к файлу скрипта и отключит js то window.location.href = 'info.php' не сработает и он останется на файле скрипта, а header по любому перекинет...

  Ответить  
 
 автор: confirm   (07.04.2017 в 20:18)   письмо автору
 
   для: xxxZIKxxx   (07.04.2017 в 19:34)
 

Не надо городить чушь. Поместите на страницу iframe, по адресу его запроса перенаправьте запрос на другой адрес. Если при этом родительское окно будет перезагружено, тогда можете еще лапшу мне на уши вешать.
Если пользователь отключит JS, то все будет работать естественным образом.

  Ответить  
 
 автор: xxxZIKxxx   (07.04.2017 в 20:40)   письмо автору
 
   для: confirm   (07.04.2017 в 20:18)
 

К чему столько эмоций (чушь, лапша), спокойней надо быть... Ясен пень если бы я обладал необходимыми знаниями я не обращался бы за помощью, про iframe не подумал, спасибо!
Самая главная суть вопроса, почему везде работает а на мобилке с виндой не работает. На компе windows тоже проще переустановить чем найти косяк в его работе, так и вы пишите - реализуй код по другому, но это не ответ на вопрос.... Если он работает везде значит можно так реализовывать, а если где-то не работает значит есть нюанс в восприятии, так вот и хотелось бы узнать этот нюанс чтоб при дальнейшей работе быть осведомлённым.

Нашёл ответ: надо было прописывать не header('Location: 'info.php'), а header('Location: 'info.php', true, 200). Ответ в одну строчку получил на другом форуме. Но всё равно спасибо уважаемому "confirm" за уделённое время ;)

  Ответить  
 
 автор: confirm   (07.04.2017 в 21:22)   письмо автору
 
   для: xxxZIKxxx   (07.04.2017 в 20:40)
 

Если не обладаете знаниями, то не порите чуши, что вас у работает то о чем вы тут ведаете. Вам не раз уже сказано было - НЕ будет никакого перехода в случае асинхронных запросов! И выполнять их, это просто большая глупость. Но вместо того чтобы разобраться с этим и понять, вы гоните какую-то чушь.

Есть в наличии локальный сервер для отладки? Сохраните этот файл под любым именем.

<?
if($_POST) {
    
header('location: d.php');
    exit;
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script> 
$(function() {
    $.post(location, {a:1}, function(d) {
        $('body').append(d)
    })
});
</script> 
</head>
<body>
</body>
</html>


Этот файл сохранить под именем d.php в той же директории, что и первый.

<?php
echo 'Test';
?>


Запустите первый файл. При его запуске будет произведен асинхронный запрос к этому же файлу. Но не смотря на то, что на запрос сервер перенаправит его на файл d.php, браузер НЕ совершит перехода, как вы тут все трактуете, а просто добавит результат работы d.php на страницу. Адресная строка браузера при этом будут отображать адрес первого файла.

Вопрос - зачем делать перенаправления браузера при асинхронных запросах, если они не работают по прямому назначению? Сколько еще можно об этом говорить?

Если в качестве ответа на асинхронный запрос нужно отдать результат работы сценария другого файла, то это делают не перенаправлениями, а подключением его - include.

Непонимание, это плохо, заблуждение еще хуже. Заблуждение в том, что вы делаете все правильно и есть первая предпосылка ошибок, которые у вас есть. А если учесть, что JS у разных браузеров, это отдельная "песня", то ситуация еще больше усугубляется.

Открывайте отладчик браузера и разберитесь в конце концов чего вы творите.

PS. Перенаправлять браузер по асинхронному запросу может быть полезным, например, при запросах с стороннему домену через свой сервер. К примеру по причине связанной с вопросами безопасности. Для своих же скриптов, это пустая затея.

  Ответить  
 
 автор: xxxZIKxxx   (07.04.2017 в 21:30)   письмо автору
 
   для: confirm   (07.04.2017 в 21:22)
 

У меня всё работает как я написал выше, и не какую чушь я не порю... Вот ссылка на статью что мне там кинули https://russianpenguin.ru/2015/02/07/ajax-%D0%B8-%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA-location-%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8/

  Ответить  
 
 автор: confirm   (07.04.2017 в 21:33)   письмо автору
 
   для: xxxZIKxxx   (07.04.2017 в 21:30)
 

Все. Не хотите понимать, что вам говорят, и что логика работы вашего приложения никуда не годится, как хотите, значит разбирайтесь сами. Я же тратить время попусту не хочу.

  Ответить  
 
 автор: xxxZIKxxx   (07.04.2017 в 21:40)   письмо автору
 
   для: confirm   (07.04.2017 в 21:33)
 

Я ещё раз говорю что я не заступаюсь за логику и реализация кода тут не причём, вопрос был почему не работает ответ потому что header надо было поправить вот и вся полемика. Если бы я хотел узнать как это написать правильно, то так бы и спросил.

  Ответить  
 
 автор: confirm   (07.04.2017 в 21:45)   письмо автору
 
   для: xxxZIKxxx   (07.04.2017 в 21:40)
 

Полный кошмар. Уясните раз и навсегда каждый запрос браузера, это открытие соединения. Делать переходы по своим скриптам в ответ на асинхронный запрос, кроме расточительства ничего не дает.

Учите матчасть.

А насчет - у меня работает, так в конце концов прочесть и понять, что именно и как работает. Это не работа, это бардак.

  Ответить  
 
 автор: xxxZIKxxx   (07.04.2017 в 22:05)   письмо автору
 
   для: confirm   (07.04.2017 в 21:45)
 

Ок)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования