Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 27.10.2015, 10:48
Аспирант
Отправить личное сообщение для Miheeva Посмотреть профиль Найти все сообщения от Miheeva
 
Регистрация: 18.02.2015
Сообщений: 58

Сообщение от laimas Посмотреть сообщение
Миледи, давайте так:

1) Есть страница one.php, на которой обрабатывается GET-параметр "name". Эта страница может запрашиваться с любой страницы (кроме ajax-запроса), и если да, то GET-параметр "name" приходит с некой "ХХ" страницы? Каково назначение этой страницы?

2) Есть некая страница "Х" содержащая ajax-запрос без GET-параметров. Каково назначение этой страницы?

3) Что в итоге должны "родить" совместные усилия страниц one.php и Х?
страницы one.php такой нету, я этот файл зарыла в опред. папку. И хочется сделать чтобы после загрузки страницы загружался этот файл (его данные, где GET передался ему).
Ответить с цитированием
  #12 (permalink)  
Старый 27.10.2015, 10:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Miheeva
страницы one.php такой нету
Загадочная адронно-коллайдерная логика женщины.

Во-первых - если файл закрыт для прямого доступа, то не сможет никакой ajax-запрос достучаться до него, возврат будет 404. Этот файл будет доступен только владельцу - php-сценарию выполняющемуся от имени владельца.

Во-вторых вы не ответили на вопросы - откуда берется на этой странице GET["name"] если ajax-запрос не передает такого параметра?

Абстрагируйтесь от кода серверного и клиентского, просто описать словами задачу выполняющую этими скриптами можете?
Ответить с цитированием
  #13 (permalink)  
Старый 27.10.2015, 11:02
Аспирант
Отправить личное сообщение для Miheeva Посмотреть профиль Найти все сообщения от Miheeva
 
Регистрация: 18.02.2015
Сообщений: 58

давате я напишу что я хотела в начале сделать.

Я хотела сделать чтобы данный php код загружался после полной загрузки страницы.

Вот сам пхп код (хотела впихнуть в one.php).

<?
	
	$projectx = "http://".$project."";
		
		function isSiteAvailable($projectx)
{
    // проверка на валидность представленного url
    if(!filter_var($projectx, FILTER_VALIDATE_URL)) {
      return 'error';
    }
 
    // создаём curl подключение
    $cl = curl_init($projectx);
    curl_setopt($cl,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($cl,CURLOPT_HEADER,true);
    curl_setopt($cl,CURLOPT_NOBODY,true);
    curl_setopt($cl,CURLOPT_RETURNTRANSFER,true);

    // получаем ответ
    $response = curl_exec($cl);

    curl_close($cl);
$project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]);
    if ($response){ return '<img style="vertical-align:-5px;" src="/images/online.png"></img> <font color="#0dd82e">Работает</font>';
}else{
if(file_exists('../../images/screens/'.$project.'.png'))
 unlink('../../images/screens/'.$project.'.png');
 
$r=mysql_query("update `ca` set `type`='0' where `link`='".$project."'");
    return '<img style="vertical-align:-5px;" src="/images/offline.png"></img> <font color="red">Не работает</font>';
}}
 if(isset($projectx)){
   $response = isSiteAvailable($projectx);
   $message = ''.$response.'';
}
if (isset($message)) echo $message;
 
	?>


Может я не том путём пошла? Как тогда такое чудо сделать?
Ответить с цитированием
  #14 (permalink)  
Старый 27.10.2015, 12:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Этот код не поясняет откуда берется злополучный $_GET["name"], а тем более того, что вообще вы хотите сделать. Ну есть cURL запрос к ресурсу, это понятно, но как это связано с $_GET["name"] и с остальным, загадка.

У вас есть локальный сервер для отладки? Загрузите в него два скрипта:

a.php

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    var o = $('#box').click(function() {
        var p = o.data('p') ^ 1; //инвертируем значение переключателя
        o.data({p: p});
        //в зависимости от значения переключателя будет передавать или нет get-параметр в запросе 
        o.load('b.php' + (p ? '?name=var_name' : ''))
    }).data({p: 1}) //определим переключатель
});
</script>
<div id="box" style="padding:20px;border:1px solid #444;"></div>


b.php

<?php
//если запрос содержит get-параметр, то возвращаем его, иначе сообщаем, что его не было
exit($_GET['name'] ?: 'Not name')
?>


Запустите файл a.php и щелкайте по DIV, можете следить за запросом и в отладчике. Как видите сервер будет возвращать $_GET['name'] или же сообщать что его не было с каждым щелчком по DIV. То есть, даже если бы вместо $_GET['name'] ?: 'Not name' был наворочен невероятный по сложности код обработки $_GET['name'], он бы ничего не делал, если такового параметра нет. Вот тоже самое и у вас в коде содержащем ajax-запрос - вы ожидаете "манны небесной" совсем не имея на то оснований, ибо никакого параметра 'name' в запросе к серверу по этому URL у вас нет. Это понятно?

Теперь пусть у нас будет еще третий игрок - файл c.php, который до файла a.php делает запрос также к странице b.php, но с передачей этого параметра - 'name'. Мы знаем, что значение этого параметра хочет получить и файл a.php, поэтому запомним его в сессии. Теперь код скрипта a.php будет таким:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    $('#box').load('b.php')
});
</script>
<div id="box"></div>


то есть просто подгружаем страницу b.php, код которой теперь будет таким:

<?php
session_start();
if(!$_SESSION['mem']) $_SESSION['mem'] = $_GET['name'];
exit($_SESSION['mem'])
?>


которая перед тем как будет запрошена страницей a.php сперва должна быть запрошена старницей c.php с таким кодом:

<a href="b.php?name=send_name">Send name</a>


Теперь загрузив эти три файла вызовите сначала файл c.php и перейдите в нем по ссылке. Это передаст в url get-параметр. В файле b.php значение этого параметра будет запомнено в сессии. После этого запросите файл a.php. Теперь этот файл получит запомненный get-параметр переданный ранее другим сценарием.

Иначе никак, нельзя из ничего получить что-то, ну это же элементарно, Ватсон.

А вот что вы пытаетесь сделать, я так и не понял.

И дополнение - если некий скрипт, к которому нужно обратиться клиенту, закрыт от прямого доступа, то клиент должен обращаться не к нему, а к скрипту имеющему к нему доступ, дабы его подключить, исполнить и вернуть результат клиенту.

Последний раз редактировалось laimas, 27.10.2015 в 13:39.
Ответить с цитированием
  #15 (permalink)  
Старый 27.10.2015, 13:20
Аспирант
Отправить личное сообщение для Miheeva Посмотреть профиль Найти все сообщения от Miheeva
 
Регистрация: 18.02.2015
Сообщений: 58

а как вставить вместо var_name имеющее значение GET?
Ответить с цитированием
  #16 (permalink)  
Старый 27.10.2015, 13:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Miheeva
а как вставить вместо var_name имеющее значение GET?
Вы сперва поясните откуда оно берется у вас? Я ведь всего лишь показал пример, а что у вас я не в курсе.

Например, чтобы у вас в файле представленном выше, был обработан этот запрос

$project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]);

то некто должен обратиться к этому файлу с этим запросом. Так ли у вас это работает я и пытался выяснить, но увы, пояснений нет. )

А это может быть просто параметр в ссылке тега А, а это может быть и поле ввода формы с именем "name", кторая передается методом GET на страницу, и т.п...

Механизм я показал, что собственно можно было и не делать, ибо все просто. Поясните в конце концов просто словами - есть страница А, на которой нужно получить то-то и то-то, причем она может получать некий параметр "name" (от кого?), Есть страница Б, которая может также обращаться к этой странице, если был параметр "name", то получить его.

То есть типа такого, что собственно я и описывал. Может быть поясняя на словах и ответ "самой себе" будет сразу из этого и получен?
Ответить с цитированием
  #17 (permalink)  
Старый 27.10.2015, 13:46
Аспирант
Отправить личное сообщение для Miheeva Посмотреть профиль Найти все сообщения от Miheeva
 
Регистрация: 18.02.2015
Сообщений: 58

Ну вроде получилось передать гет.

вот готовый

$(function() {
    var o = $('#box').click(function() {
        var p = o.data('p') ^ 1; //инвертируем значение переключателя
		var csstop = "<?php echo $project;?>";
        o.data({p: p});
        //в зависимости от значения переключателя будет передавать или нет get-параметр в запросе 
        o.load('/inc/info/one.php' + (p ? '?name='+ csstop +'' : ''))
    }).data({p: 1}) //определим переключатель
});


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

$(window).load(function() {
var a = "<?php echo $project; ?>";
  setTimeout(function(){
 
	  $('#loader').hide();
    $('#cc').load('/inc/info/one.php');
   }, 1000);
 });
Ответить с цитированием
  #18 (permalink)  
Старый 27.10.2015, 14:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990



И зачем вы берет код, который я написал ради пояснения "есть/нет параметра запроса" берет себе как рабочий? Поясняю детально его:

var o = $('#box') //в переменной "o" кешируем объект #box, так как мы к нему будет не раз обращаться 
        .click(function() { //устнавливем обработку щелчка по объекту #box 
        var p = o.data('p') ^ 1; //получаем значение переключателя "p" и изменяем его бит - 0 будет меняться на 1, и наоборот - 1 меняться на 0
        var csstop = "<?php echo $project;?>"; //это ваше не понятно почему здесь взялось, и что есть "плохо"
        o.data({p: p}); //запоминаем изменение бита "p"
        //запрашиваем сервер и, если, "p" равно 1, то подставляем в запрос get-параметр, иначе запрос будет без него
        //то есть get-параметр будет передаваться на сервере черз один раз
        o.load('/inc/info/one.php' + (p ? '?name='+ csstop +'' : ''))
    })
    .data({p: 1}) //определим бит переключателя определяющего передачу get-параметра, который будет храниться в объекте #box


То есть этот код работает как триггер - есть на выходе сигнал, нет на выходе сигнала. А оно вам надо?

Суть ведь не в том чтобы впихнуть ваш $project в JS код, а в том как он завязан на логике работы вашего скрипта, что от него зависит. А что у вас теперь получилось?

Ваш серверный код так же обилует множеством ненужных промежуточных переменных. А ведь все проще:

<?php
$projectx = "http://".$project;
         
function isSiteAvailable($projectx) {
    // проверка на валидность представленного url
    if(!filter_var($projectx, FILTER_VALIDATE_URL)) return 'error';
  
    // создаём curl подключение
    $cl = curl_init($projectx);
    curl_setopt($cl,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($cl,CURLOPT_HEADER,true);
    curl_setopt($cl,CURLOPT_NOBODY,true);
    curl_setopt($cl,CURLOPT_RETURNTRANSFER,true);
 
    // получаем ответ
    $response = curl_exec($cl);
 
    curl_close($cl);
    
    $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]);
    
    if ($response) return '<img style="vertical-align:-5px;" src="/images/online.png"></img> <font color="#0dd82e">Работает</font>';
    
    else  {
        if(file_exists('../../images/screens/'.$project.'.png')) unlink('../../images/screens/'.$project.'.png');
  
        mysql_query("update `ca` set `type`='0' where `link`='".$project."'");
        
        return '<img style="vertical-align:-5px;" src="/images/offline.png"></img> <font color="red">Не работает</font>';
    }
} 

if(isset($projectx)) echo isSiteAvailable($projectx);
?>


И теперь у вас этот код будут работать через раз по разному сценарию, так как используя мой пример $_GET["name"] будет через раз, и обновление:

mysql_query("update `ca` set `type`='0' where `link`='".$project."'");

просто бессмысленное. А ведь должна же быть некая логика. А ее нет сейчас вообще.
Ответить с цитированием
  #19 (permalink)  
Старый 27.10.2015, 14:14
Аспирант
Отправить личное сообщение для Miheeva Посмотреть профиль Найти все сообщения от Miheeva
 
Регистрация: 18.02.2015
Сообщений: 58

суть я поняла) а как сделать чтобы выводилось оно само к примеру через 5 сек после полной загрузки страницы?
Ответить с цитированием
  #20 (permalink)  
Старый 27.10.2015, 14:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Miheeva
а как сделать чтобы выводилось оно само
Что "оно"?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не вызывается функция при изменении option soft4you Общие вопросы Javascript 1 23.07.2014 16:41
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 12:01
функция load() с субдомена Кирюха =) AJAX и COMET 5 02.08.2012 19:37
функция не успевает Sadist_dead Элементы интерфейса 22 02.10.2011 18:00
Функция Load в Mootools vanches Библиотеки/Тулкиты/Фреймворки 1 20.08.2010 15:24