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

HTML+CSS+JavaScript

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

 

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

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

тема: Ajax и Smarty
 
 автор: VL   (17.04.2012 в 08:29)   письмо автору
 
 

Простые элементы Jquery работают нормально. Пытался сработать Ajax, что имеем.
(Просто без Smarty локальный пример работает)

Ajax.php

<?php 
$regions 
= array();
$regions[] = array('id'=>'1''title'=>'A');
$regions[] = array('id'=>'2''title'=>'B');
$regions[] = array('id'=>'3''title'=>'C');
$regions[] = array('id'=>'4''title'=>'D');
$result = array('type'=>'success''regions'=>$regions);
print 
json_encode($result);
?>


Ajax.js

$(document).ready(function () {
  
    $('#country_id').change(function () {
       
        var country_id = $(this).val();
       
        if (country_id == '0') {
            $('#region_id').html('');
            $('#region_id').attr('disabled', true);
            return(false);
        }
        
        $('#region_id').attr('disabled', true);
        $('#region_id').html('<option>загрузка...</option>');
        
        var url = '/modules/goods/ajax.php';
           
        
        $.get(
                url,
                "country_id=" + country_id,
                function (result) {
                    if (result.type == 'error') {
                        alert('error');
                        return(false);
                    }
                    else {
                        var options = '';
                        $(result.regions).each(function() {
                            options += '<option value="' + $(this).attr('id') + '">' + $(this).attr('title') + '</option>';
                        });
                        $('#region_id').html(options);
                        $('#region_id').attr('disabled', false);
                    }
                },
                "json"
            );
        });
    });



html документы

  <select name="country_id" id="country_id">
        <option value="0" selected>- тип операции -</option>
        <option value="1">Расход</option>
        <option value="2">Приход</option>
    </select>
    <p>Регион:</p>
    <select name="region_id" id="region_id" disabled="disabled">
        <option value="0">&nbsp;</option>
    </select>


При выборе Расход, приход поле region_id меняется на загрузка, в FireBug ответ
в виде Json

{"type":"success","regions":[{"id":"1","title":"A"},{"id":"2","title":"B"},{"id":"3","title":"C"},{"id":"4","title":"D"}]}

Все как надо.

Заголовки ответа вот

Cache-Control no-cache, max-age=1
Connection Keep-Alive
Content-Length 122
Content-Type text/html; charset=windows-1251
Date Tue, 17 Apr 2012 04:23:50 GMT
Expires Tue, 17 Apr 2012 04:23:51 GMT
Keep-Alive timeout=5, max=94
Pragma no-cache
Proxy-Connection Keep-Alive
Server Apache
Via 1.1 MAIN
X-Powered-By PHP/5.3.10

  Ответить  
 
 автор: AlexSol   (17.04.2012 в 09:08)   письмо автору
 
   для: VL   (17.04.2012 в 08:29)
 



 var options = ''; 
                        $.each(result.regions,function(i,n) { 
                            options += '<option value="' + n.id + '">' + n.title + '</option>'; 
                        }); 
                        $('#region_id').html($(options)); 
                        $('#region_id').attr('disabled', false); 
                    } 

  Ответить  
 
 автор: VL   (17.04.2012 в 09:24)   письмо автору
 
   для: AlexSol   (17.04.2012 в 09:08)
 

Спс.обновил


$.get(
                url,
                "country_id=" + country_id,
                function (result) {
                    
                    if (result.type == 'error') {
                        alert('error');
                        return(false);
                    }
                    else {
                    
                    var options = '';  
                    $.each(result.regions,function(i,n) {  
                        options += '<option value="' + n.id + '">' + n.title + '</option>';  
                    });  
                    $('#region_id').html($(options));  
                    $('#region_id').attr('disabled', false);  
                    }
                },
                "json"
            );



Но ситуация таже

  Ответить  
 
 автор: confirm   (17.04.2012 в 12:32)   письмо автору
 
   для: VL   (17.04.2012 в 09:24)
 

$(options) - это объект.
$('#region_id').html(options);

  Ответить  
 
 автор: VL   (17.04.2012 в 15:37)   письмо автору
 
   для: confirm   (17.04.2012 в 12:32)
 

Локально пример мой выше работает на Ура. Но когда прикручиваю к Smarty возникает трабла, я думаю проблема не в Jquery коде а что то где то я упустил с кешем и так далее.
Есть идеи?

  Ответить  
 
 автор: confirm   (17.04.2012 в 15:52)   письмо автору
 
   для: VL   (17.04.2012 в 15:37)
 

Не знаю чего у вас там на ура, но втыкать объект, как HTML содержимое.... Какое уж к черту тут ура.
Нет идей, я вообще не понимаю, о чем вы.

  Ответить  
 
 автор: VL   (17.04.2012 в 15:58)   письмо автору
 
   для: confirm   (17.04.2012 в 15:52)
 

Поправил. На локале все ок, в связки в Smarty ответ в FireBug есть , DOM не реагирует

  Ответить  
 
 автор: confirm   (17.04.2012 в 16:29)   письмо автору
 
   для: VL   (17.04.2012 в 15:58)
 

Smarty - это шаблонизатор работающий на сервере, и FireBug он как-то по боку.

  Ответить  
 
 автор: VL   (18.04.2012 в 10:39)   письмо автору
 
   для: confirm   (17.04.2012 в 16:29)
 

Так в чем тогда проблема ? и ваш вариант решения

  Ответить  
 
 автор: confirm   (18.04.2012 в 10:51)   письмо автору
 
   для: VL   (18.04.2012 в 10:39)
 

А я откуда знаю в чем у вас проблема. Вы писали, что не получается получить элементы json, я вам указал в чем была ошибка. Что еще?
Понимаете, браузеру, как и JS, глубоко наплевать кто породил html, Smarty ли это сделал, или вообще без его участия.
Вы сформулируйте суть проблемы своей, и без всего, что отношения к ней не имеет, тогда возможно и получите ответ на вопрос.

  Ответить  
 
 автор: VL   (18.04.2012 в 13:33)   письмо автору
 
   для: confirm   (18.04.2012 в 10:51)
 

Ошибку что вы указали я поправил.
Если я выполняю этот пример просто в отдельной папке тест на сервере - все работает .
Когда я прикручиваю это к проект где использется смарти то
изменяет поле на LOADING. и данные не подгружаются
но Данные JSON приходят судя по FIREBUGу, то есть Я вижу ответ на мой запрос $.get, но функция указанная в $.get не срабатывает даже если я туда напишу alert , что самое банальное

  Ответить  
 
 автор: confirm   (18.04.2012 в 13:42)   письмо автору
 
   для: VL   (18.04.2012 в 13:33)
 

Еще раз повторяю - на клиенте нет никакого Smarty, у клиента чистый html-код. Вот и анализируйте этот код, чтобы выявить ошибку. А уж кто виновником ее является, это уже другой вопрос - либо вы не передали в шаблон нужного, либо не правильно используете Smarty, от чего на вашей странице могут быть явные ошибки.
А догадываться, что у вас там, не зная вашего кода, никто не будет.

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

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