Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   берем, проверяем, выводим. (https://javascript.ru/forum/jquery/18317-berem-proveryaem-vyvodim.html)

jayson 26.06.2011 00:25

берем, проверяем, выводим.
 
вот мой код

HTML страницы с которой выполняется скрипт
<div id="div_1"></div>
<div id="div_body"></div>

HTML страницы с которой происходит загрузка
<div id="div_value"></div>

сам скрипт
function checkme() {
$(#div_1).load('page.php #div_value');
var ck_value = $(#div_1).text();
if (ck_value == "") {
$("#div_body").load('error.php');
}
else {
$("#div_body").load('ok.php');
}
}


суть работы - эта функция загружает в саму страницу с которой делается скрипт, заданный див с другой страницы, а потом идет проверка если ниче нету то ошибка , если чтото есть то ОК

вопрос заключается в том что проверка не работает, почему? профессионалы помогите мне пожалуйста :yes:

и вот заодно напишу пару вопросов
когда происходит заргузка данного дива то это выглядит вот так
<div id="div_1"><div id="div_value">12345</div></div>

как сделать чтобы только сам див (div_value) не загружался а только что внутри него

вот в этой строчке $(#div_1).load('page.php #div_value'); если дописать .text()
тоесть так $(#div_1).load('page.php #div_value').text();
что это дает, и вообще надо ли, может из-за этого не сравнивает?!


далее вот эти дивы
<div id="div_1"></div>
<div id="div_body"></div>

я записал в саму страницу тоесть они уже там присутствуют, а как сделать так чтобы они добавлялись самим яваСкриптом, тоесть в html не прописывать, а вставлять в хтмл при выполнении функции, вроде знаю что так можно

ответьте пожалуйста на мои вопросы умники и умницы

melky 26.06.2011 00:41

всегда ставь JS в BB-теги

на странице такой же скрипт? если да, то смотри внимательней
$(*!*#div_1*/!*).load('page.php #div_value');
var ck_value = $(*!*#div_1*/!*).text();
if (ck_value == "") {
$("#div_body").load('error.php');
}
else {
$("#div_body").load('ok.php');
}
}


строки должны быть заключены в кавычки :)
ошибок на странице не возникает?

window.onerror = function(){alert('err')}

jayson 26.06.2011 01:31

это тут опечатка , а на странице в кавычках, так что скажешь по поводу моих вопросов?)

melky 26.06.2011 02:04

Цитата:

Сообщение от jayson (Сообщение 110514)
вот мой код

HTML страницы с которой выполняется скрипт
<div id="div_1"></div>
<div id="div_body"></div>

HTML страницы с которой происходит загрузка
<div id="div_value"></div>

function checkme() {
$(#div_1).load('page.php #div_value');
var ck_value = $(#div_1).text();
if (ck_value == "") {
$("#div_body").load('error.php');
}
else {
$("#div_body").load('ok.php');
}
}

Цитата:

Сообщение от jayson (Сообщение 110514)
когда происходит заргузка данного дива то это выглядит вот так
<div id="div_1"><div id="div_value">12345</div></div>

как сделать чтобы только сам див (div_value) не загружался а только что внутри него


обработай входные данные или убери вывод этого дива.

насчет первого ,

вместо
$("#div_1").load('page.php #div_value');


пиши

$("#div_1").load('page.php #div_value', *!*function(data){this.innerHTML=data.replace(/<.+>(.*)<.+>/,"$1")}*/!*);

или это
*!*$("#div_1").html(*/!*     $("#div_1").load('page.php #div_value').text()   *!*)*/!*


Цитата:

Сообщение от jayson (Сообщение 110514)
вот в этой строчке $(#div_1).load('page.php #div_value'); если дописать .text()
тоесть так $(#div_1).load('page.php #div_value').text();
что это дает, и вообще надо ли, может из-за этого не сравнивает?!

смотри на сайте документации $.text()
если неясно - спустись вниз до примеров, там станет ясно

Цитата:

Сообщение от jayson (Сообщение 110514)
далее вот эти дивы
<div id="div_1"></div>
<div id="div_body"></div>

я записал в саму страницу тоесть они уже там присутствуют, а как сделать так чтобы они добавлялись самим яваСкриптом, тоесть в html не прописывать, а вставлять в хтмл при выполнении функции, вроде знаю что так можно

можно, читай документацию на русском

jayson 26.06.2011 02:20

Цитата:

пиши

$("#div_1").load('page.php #div_value', function(data){this.innerHTML=data.replace(/<.+>(.*)<.+>/,"$1")});

или это
$("#div_1").html( $("#div_1").load('page.php #div_value').text() )
прокомментируй пожалуйста что эти коды делают чтобы я понимал

jayson 26.06.2011 02:25

melky
var ck_value = $(#div_1).text();
вот смотри здесь зачем нужен text() чтобы потом можно было сравнивать верно?




а вот здесь я не знаю нужен он или нет вроде пробовал и так и так и ниче незнаю че делается в итоге
$("#div_1").load('page.php #div_value').text()



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

melky 26.06.2011 02:27

Цитата:

Сообщение от jayson (Сообщение 110525)
прокомментируй пожалуйста что эти коды делают чтобы я понимал

$("#div_1").html( $("#div_1").load('page.php #div_value').text() )


можно расписать как

// загрузит с тегом DIV и вернет текст (уже без DIV )
// т.е. просто 12345 
var newText = $("#div_1").load('page.php #div_value').text();
// записывает этот текст в дивчик
$("#div_1").html( newText  )


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

jayson 26.06.2011 02:35

ok следуем дальше, вообщем функция не распознает , может это потомучто не успевает? я просто смотрел через дебаггер там все встраивается в страницу, но загружает всегда
$("#div_body").load('error.php');
этот код, мне кажется не успевает чтоли или я неззнаю че тут неправильно

да и всетаки скажи вот здесь нужен текст код?


$("#div_1").load('page.php #div_value').text();
потомучто работает и так и так вроде


и дак какой пример лучше использовать там где ты говоришь колбек или второй
и в чем разница между ними

melky 26.06.2011 02:58

для понимания кода легче написать без колбека. ну, для меня, по крайней мере.

я не помню, или не соображаю уже, но load - это асинхронный или синхронный AJAX?

поставь так вокруг

$("#div_1").html( $("#div_1").load('page.php #div_value').text() )


и смотри в сообщения консоли


console.log("LOADING started")

$("#div_1").html( $("#div_1").load('page.php #div_value',function(){console.log("LOADING was ASYNC")}).text() );

console.log("LOADING was sync.");


и запусти еще раз

если после сообщения "LOADING started" идет "LOADING was ASYNC", то делай этот запрос синхронно, через $.ajax().

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

jayson 26.06.2011 03:39

идет вот так

LOADING started
LOADING was sync.
LOADING was ASYNC



а код всетаки грузит так оба дива
<div id="div_1"><div id="div_value">12345</div></div>

это потомучто лоад асинхронный да?

melky 26.06.2011 15:12

да

перепиши этот кусок через $.ajax.

поставь там async : false

jayson 26.06.2011 15:23

сделал, заработало, я немного почитал и написано что синххронный запрос лучше не использовать так как браузер зависает пока ждет ответ в 99 процентов из 100 можно сделать асинхронно

это так?


и вот что хотел узнать , если страница с которой получает значение мой скрипт, весит 100КБ - он на самом деле то всю страницу прогружает себе в память?

так как это значение можно получить еще со сотаницы которая весит 30 кбайт

или он только загружает див? скажи как лучше и есть ли разница что див со значением вверху страницы и внизу

melky 26.06.2011 15:51

да, прогружает. но на время, пока сборщик мусора не придет. когда он приходит? написано почти в каждом учебнике.

грузит он всю страницу, потом выбирает оттуда #div, который указан, и возвращает как DATA

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

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

jayson 26.06.2011 15:58

разве нет разницы сколько ему грузить каждый раз 30 или 100 килобайт?

так ты скажи синхронно использовать это не этично?

скажи как будет грамотнее

какие последствия синхронного использования, ведь дефолтно асинхронно


(Local Event) и (Global Event) в чем разница?

melky 26.06.2011 17:22

синхронно использовать - замораживать интерфейс. создается ощущение тормозов.

не знаю

jayson 26.06.2011 17:49

Спасибо melky :thanks:

самый отзывчивый человек (по мне), ;)

jayson 27.06.2011 20:41

Парни подскажите, вот я получил некоторую информацию и начал тестировать

вот что скажу если использовать режим синхронный

function checkme() {
$('#div_1').html( $('#div_1').load('page.php #div_value').text() );
var ck_value = $('#div_1').text();
if (ck_value == "") {
$("#div_body").load('error.php');
}
else {
$("#div_body").load('ok.php');
}
}


то в div_1 загружается только значение со страницы page.php из div_value
и все окей, но страница имитирует лаг
прочитал что синхронный режим используют нубы т.к. это старье и в 99 процентов можно использовать асинхронный



---------------------далее я использую асинхронный режим и что я вижу

ну во первых в div_1 вставляется не только значение, но и div_value который его собственно и окружает

СВЕРЕНИЕ ЗНАЧЕНИЙ работает некорректно то error.php выскакивает то ok.php

мне тут подсказывали насчет таймеров всяких я подставил тайминг и соответственно error.php и ok.php стало работать правильно, всмысле в тех ситуациях в которых они и должны появляться, НО если интернет загружен то соответственно какойто бред получается, опять то эррор то ок
я так понимаю это из-за того чтоне успевает чтоли проверять, я заметил это из-за того что поставив таймер както стало различаться значения

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



И ВОТ ЧТО ЕЩЕ смотрите на этот код


$('#div_1').html( $('#div_1').load('page.php #div_value').text() );


расшифровка, в div_1 загрузить с такой то страницы такое то див


тут еще стоит код .html
он вроде должен сделать так если <div id="div_1">ВЫВОД_ЗНАЧЕНИЯ</div> - да так он делает если синхронно
<div id="div_1"><div id="div_value">ВЫВОД_ЗНАЧЕНИЯ</div></div> - а так он загружает если асинхронный, блин как сделать чтобы <div id="div_value"></div> не загружался








И ЕЩЕ ВОПРОС

опять же код
$('#div_1').html( $('#div_1').load('page.php #div_value').text() );


если сделать так
$('body').load('page.php #div_value').text();


то он все что в боди очищает
я что хочу узнать , А НЕЛЬЗЯ СДЕЛАТЬ ЧТОБЫ ЭТО ДОБАВЛЯЛОСЬ В СТРАНИЦУ ВНУТРЬ ТЕГА БОДИ
а то надо создавать див , указывать что в этот див загружать, для меня удобне чтобы просто в боди записывался


вроде пока все))

melky 27.06.2011 21:06

могу только посоветовать взять в руки debugger и отлаживать код.
кроме вас самих, лучше никто помочь не сможет :) удачи

jayson 27.06.2011 21:24

melky ты ведь компитентен в том что я написал , разъясни мне пожалуйста :blink:

melky 28.06.2011 01:19

Цитата:

Сообщение от jayson (Сообщение 110828)
прочитал что синхронный режим используют нубы т.к. это старье и в 99 процентов можно использовать асинхронный

я бы не сказал, что его используют нубы и в 99 % процентов случаев можно использовать асинхронный, его можно использовать всегда :)

где ты это прочитал?

Цитата:

Сообщение от jayson (Сообщение 110828)
ну во первых в div_1 вставляется не только значение, но и div_value который его собственно и окружает

СВЕРЕНИЕ ЗНАЧЕНИЙ работает некорректно то error.php выскакивает то ok.php

надо переписать скрипт (в конце поста)


Цитата:

Сообщение от jayson (Сообщение 110828)
вообщем что хочу спросить, почему когда синхронный запрос, то он как дядя петя пока не получит значение не выведет то что нужно приказать при этих значениях, а если асинхронно то ему наплевать как стрекозе наташе, что нужно сделать , ведь вы про, вы знаете еще какие коды можно применить, ведь тайминг может это бред и можно как то сделать правильно чтобы все работало

потому что он синхронный, как дядя ваня после запоя. делает одно дело одновременно...

а бабочка наташа асинхронна, она умеет делать два дела одновременно : делает дела синхронного алкаша дяди вани и свои , асинхронные, дела.

нихрена не понятно самому :D

короче, синхронность-заморозка, асинхронность-события и их обработчики (колбеки)

Цитата:

Сообщение от jayson (Сообщение 110828)


$('#div_1').html( $('#div_1').load('page.php #div_value').text() );


если сделать так
$('body').load('page.php #div_value').text();


то он все что в боди очищает

хм. расставлю везде алерты, напишешь вывод

у меня файл ajax.php, в котором

<div id="div_value">123</div>

на странице такой HTML
<div id="div_1"></div>
<div id="div_body"></div>

и такой скрипт
$('#div_1').load('ajax.php #div_value', function(a){
        
        console.log("пришло : "+a)
        a=a.replace(/<.+>(.*)<.+>/,"$1")
        console.log("стало : "+a)
        console.log(  "Мы будем загружать : "+(a.length ? "OK.php":"error.php")   )
    })


вывод

Код:

пришло : <div id="div_value">123</div>
стало : 123
Мы будем загружать : OK.php

если все хорошо то вот твой конечный скрипт

function checkme() {

    $('#div_1').load('ajax.php #div_value', function(a){

        $('#div_1').text( (a=a.replace(/<.+>(.*)<.+>/,"$1")) )
        $("#div_body").load( a.length ? "ok.php":"error.php"  )   

    })

}

jayson 28.06.2011 17:00

постоянно ok.php (опятьже видимо потомучто не успевает проверить)

melky 28.06.2011 20:48

а вывод что пишет в консоль?


Часовой пояс GMT +3, время: 02:24.