Форум русской поддержки Joomla!® CMS
07.12.2016, 12:46:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

Как передать результат Javascript !

 (Прочитано 1062 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« : 26.12.2015, 18:57:51 »

Здравствуйте!
Пытаюсь передать результат работы скрипта так:
{
            $("#tarif").html( result );
        }
Но никакого результата в соответствующее поле не заносится.
Если в свойствах формы, в макете, поставить <div id="tarif"></div>, результат выводится, а текстовым полем в инструментах формы - нет.

Подскажите пожалуйста - как сделать, чтобы результат выводился через поля RSForm. Спасибо!
Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2460



« Ответ #1 : 26.12.2015, 19:06:28 »

Код:
setTimeout(function () {
    $("#tarif").html( result );
});
Если не прокатит, тогда делайте это из js RSForm. Там должны быть какие-нибудь колбэки типа success для AJAX. Сейчас Ваша проблема в асинхронности работы формы. Вы пытаетесь управлять DOM из соседнего окружения переменных. Там, откуда пытаетесь что-либо сделать, недоступен элемент #tarif. Чтобы проверить сделайте вот так

Код:
console.log($("#tarif").length);

Результатом будет "0". Потому что это окружение сформировано раньше, чем в DOM определяется форма с id="tarif". setTimeout - это один из способов вырвать что-либо из синхронного потока. Не всегда работает правда. Но попробовать стоит.
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #2 : 26.12.2015, 21:01:13 »

Не прокатило  Sad
console.log($("#tarif").length); - ничего не вывел (может, я не туда куда нужно вставил (следующей строкой после $("#tarif").html( result )Wink)
Сама функция:
<script>
function getdetails(){
    var index1 = $('#index1').val();
    var index2 = $('#index2').val();
    $.ajax({
        type: "POST",
        url: "details.php",
        data: {index1:index1, index2:index2}
    }).done(function( result )
        {
            $("#tarif").html( result );
        });
}
</script>

Сейчас еще попробую вывести форму не через материалы, а напрямую.
- Ничего не дало. Только перестал работать скрипт подсказок (поместил в свойства->java)
« Последнее редактирование: 26.12.2015, 21:10:48 от Agard » Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2460



« Ответ #3 : 26.12.2015, 21:52:53 »

Если console.log вообще ничего не вывел, то Ваш скрипт просто не работает. getdetails() либо не включается, либо AJAX не отрабатывает с ошибками. Не там ищете в общем.
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #4 : 26.12.2015, 22:02:24 »

В том-то и дело, что работает. Если в макет формы вставить: <div>Тариф: <div id="tarif"></div></div>, то на выходе получаю значение. Если использовать "Компоненты"-"поля формы" (текстовое поле), то - не работает. Как Вы уже правильно ранее заметили - не видит переменную, в которую должен скинуть результат.
Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2460



« Ответ #5 : 26.12.2015, 22:28:35 »

Код:
function getdetails(){
    var index1 = $('#index1').val();
    var index2 = $('#index2').val();
    $.ajax({
        type: "POST",
        url: "details.php",
        data: {index1:index1, index2:index2}
    }).done(function( result )
        {
            console.log(result);
        });
}

Вот так понятнее? Что возвращает? Если ничего, следовательно AJAX не работает.
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #6 : 26.12.2015, 23:04:59 »

По первому варианту console.log($("#tarif").length);
 при <div>Тариф: <div id="tarif"></div></div> показал единицу.
При варианте с "родным" полем - тоже 1
Еще пишет что присутствует неожиданный идентификатор: Uncaught SyntaxError: Unexpected identifier
Последний момент убрал
« Последнее редактирование: 26.12.2015, 23:08:10 от Agard » Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #7 : 26.12.2015, 23:08:02 »

Код details.php?
Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2460



« Ответ #8 : 26.12.2015, 23:13:25 »

смотрите, что возвращает result
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #9 : 26.12.2015, 23:23:21 »

вернуло "900" - тарифную ставку из базы. ! Знать, надо $result ...
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #10 : 26.12.2015, 23:25:27 »

Или - как теперь делать?
Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2460



« Ответ #11 : 26.12.2015, 23:26:18 »

Тогда Вам остается показать таки сайт с этим всем делом.
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #12 : 26.12.2015, 23:34:47 »

Он только на локалке у меня. Могу архив с базой и паролем на Яндекс диск выложить.
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #13 : 26.12.2015, 23:37:23 »

Т.е., на данный момент ситуация такова: result не видит куда отправить полученное значение? (я уже попробовал переименовать поле)

PHP:
<?php
//Подключение к базе данных
$DBASE = mysql_connect("localhost","root", "") or die("Could not connect: " . mysql_error());
mysql_select_db("express") or die("Could not select database");
mysql_query("SET NAMES utf8");

//Если данные из формы передались успешно, то заносим их в переменные $index1 и $index2, в противном случае удаляем переменные.
if($_POST['index1'] and $_POST['index1'] != ''){$index1 = $_POST['index1'];}else{unset($index1);}
if($_POST['index2'] and $_POST['index2'] != ''){$index2 = $_POST['index2'];}else{unset($index2);}

//Если все данные передалис успешно, то выполняем 3 запроса к базе данных.
if(isset($index1) AND isset($index2)){

//Запрос 1
//Находим строку в таблице x6yzj_zona, в которой значение indx равен $index1 и заносим значение zona в переменную $zona_a
$result_zona_a = mysql_query("SELECT zona FROM x6yzj_zona WHERE indx = $index1");
$row_zona_a = mysql_fetch_array($result_zona_a);
$zona_a = $row_zona_a['zona'];

//Запрос 2
//Находим строку в таблице x6yzj_zona, в которой значение indx равен $index2 и заносим значение zona в переменную $zona_b
$result_zona_b = mysql_query("SELECT zona FROM x6yzj_zona WHERE indx = $index2");
$row_zona_b = mysql_fetch_array($result_zona_b);
$zona_b = $row_zona_b['zona'];

//Запрос 3
//Ищем строку в таблице x6yzj_tarif, в которой значение zonaa равно переменной $zona_a и значение zonab равно $zona_b и выводим значение tarif в переменную $tarif
$result_tarif = mysql_query("SELECT tarif FROM x6yzj_tarif WHERE zonaa='$zona_a' AND zonab='$zona_b'");
$row_tarif = mysql_fetch_array($result_tarif);
$tarif = $row_tarif['tarif'];


echo "$tarif";
}
?>
« Последнее редактирование: 26.12.2015, 23:52:27 от Agard » Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2460



« Ответ #14 : 27.12.2015, 00:56:06 »

Устанавливать себе что-либо ради помощи Вам тут вряд ли кто-то будет. Помощь нужна Вам, а не нам. Если не можете организовать демо в интернетах, следовательно и помощь не так чтобы очень нужна.
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #15 : 27.12.2015, 01:54:33 »

Хотя мне не очень нравится ваш PHP-код, он возвращает результат
вернуло "900" - тарифную ставку из базы.
Тогда не понимаю, почему
Код
   done(function( result )
       {
           $("#tarif").html( result );
       });
 
не работает. А если сделать проверку
Код
   done(function( result )
       {
           $("#tarif").html("test");
       });
 
?
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #16 : 27.12.2015, 08:17:16 »

$("#tarif").html("test");
900
1
на
console.log(result);
console.log($("#tarif").length);
Если test без кавычек
$("#tarif").html( test );
то:
Uncaught ReferenceError: test is not defined
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #17 : 27.12.2015, 10:53:23 »

Хотя мне не очень нравится ваш PHP-код, он возвращает результат
Если так:
<div>Тариф: <div id="tarif"></div></div>
при "Генерировать макет автоматически?" = нет
то = результат выводит.
Проблема в том, что в этом случае он не записывается.
Расчеты, tarif = {tarif:value} - ничего не меняет.

Пока не пробовал вариант "//<code>
PHP-код
//</code> - так как не знаю - как?
« Последнее редактирование: 27.12.2015, 10:57:30 от Agard » Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #18 : 27.12.2015, 13:24:32 »

Хотя мне не очень нравится ваш PHP-код, он возвращает результат
А, его как-то по-другому, в рамках RSForm, реализовать можно?
Что-то вроде:
//<code>
$db = JFactory::getDbo();
$db->setQuery("SELECT 'tarif' FROM #__tarif WHERE 'zonaa'=("SELECT 'zona' FROM '#__zona' WHERE 'indx' = '".$index1."'") AND 'zonab'=("SELECT 'zona' FROM '#__zona' WHERE 'indx' = '".$index2."'")");
$tarif = $db->loadResult();
//</code>

(в этом варианте синтаксическая ошибка)

?
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #19 : 27.12.2015, 14:26:00 »

Не заметил, что тема в разделе RSForm, которым я не пользуюсь. Зачем вам этот RSForm? Напишите сами, это всего лишь форма.
И зачем вы смотрели в консоле, если код
Код
      done(function( result )
       {
           $("#tarif").html("test");
       });
 
?
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #20 : 27.12.2015, 14:47:31 »

      done(function( result )
        {
            $("#tarif").html("test");
        });
 Ничего не произошло.
Наверное - да, надо без конструктора.
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #21 : 27.12.2015, 15:20:26 »

Тогда попробуйте
Код
      done(function( result )
       {
           $("#tarif").text("test");
       });
 
Без видения общей картины будет трудно гадать, хотя, судя по вашим постам, вроде AJAX успешно выполнен.
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #22 : 27.12.2015, 16:47:48 »

По последним тестам в простом Жумловском матерьяле выяснилось: переменная $tarif не хочет жить в инпуте: <input type="text" name="tarif" id="tarif" />. А, вот в диве - пожалуйста: <div id="tarif"></div>
Может, здесь можно этот момент уточнить:
function getdetails(){
    var index1 = $('#index1').val();
    var index2 = $('#index2').val();
    $.ajax({
        type: "POST",
        url: "details.php",
        data: {index1:index1, index2:index2}
    }).done(function( result )
        {
            $("#tarif").html( result );
        });
}
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #23 : 27.12.2015, 16:49:55 »

Причем, если оба варианта присутствуют на странице: инпут и div с id=tarif, она тоже никуда не хочет ставиться...
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #24 : 27.12.2015, 18:43:43 »

По последним тестам в простом Жумловском матерьяле выяснилось: переменная $tarif не хочет жить в инпуте: <input type="text" name="tarif" id="tarif" />. А, вот в диве - пожалуйста: <div id="tarif"></div>
А чего вы хотите? Для input используется val().
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #25 : 27.12.2015, 18:55:00 »

А я только разобрался с тем - где смотреть test...
Не подскажете, val() - как правильно надо прописать в этом:
<script>
function getdetails(){
    var index1 = $('#index1').val();
    var index2 = $('#index2').val();
    $.ajax({
        type: "POST",
        url: "details.php",
        data: {index1:index1, index2:index2}
    }).done(function( result )
        {
            $("#tarif").html( result );
        });
}
</script>

Спасибо!
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #26 : 27.12.2015, 19:01:36 »

Синтаксически все правильно, больше я ничего не могу сказать: вы задали загадку, приведя скрипт без HTML.
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #27 : 27.12.2015, 19:06:26 »

<div class="rsform-block rsform-block-tarif">
      <div class="formControlLabel">Тариф</div>
      <div class="formControls">
      <div class="formBody"><input type="text" value="" size="20"  name="form[tarif]" id="tarif"  class="rsform-input-box"/><span class="formValidation"><span id="component119" class="formNoError">Неверный ввод</span></span></div>
      <p class="formDescription"></p>
      </div>
   </div>
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #28 : 27.12.2015, 19:10:00 »

Код
$("#tarif").val(result);
Записан
Agard
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Пол: Мужской
Сообщений: 83



« Ответ #29 : 27.12.2015, 19:42:39 »

Код
$("#tarif").val(result);
Не-а... Sad
Может, где-то надо поставить ".input" ?
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet