Ajax и Smarty

Exorcist

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

Ajax.php
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
PHP:
$(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" 
            ); 
        }); 
    });
Вывод Smarty
PHP:
 $GLOBALS['tmpl']->assign("content", $GLOBALS['tmpl']->fetch($this->tpl_dir . "transaction_of_finance_FormRecord.tpl"));
html документы
PHP:
  <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

Создал папку test на хостинге - все идельно пашет, Но когда совмещаю это со смарти просто непонятнки


Грешу на кэшинг или еще что.
 

Exorcist

Новичок
Ах,да в общем элемент
<select name="region_id" id="region_id" disabled="disabled">
<option value="0">&nbsp;</option>
</select>

не обновляется . пишет LOADING и точка
 

Redjik

Джедай-мастер
а что фаербаг пишет? какой ответ сервера на аякс запрос?
 

Exorcist

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

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

То есть ответ от сервера я вижу и заголовок показывает Ok!.

Но почему не срабатывает функция в $.get, я даже пробывал заменять на alert, для простоты тестирования. Никак
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )
urlA string containing the URL to which the request is sent.
dataA map or string that is sent to the server with the request.
success(data, textStatus, jqXHR)A callback function that is executed if the request succeeds.
dataTypeThe type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).

Замени на ajax и узнай что за ошибку выплевывает.

Я думаю что ему не нравится
Content-Type text/html;

Поменяй dataType = text
success должен отработать

потом пишешь статику
'/modules/goods/ajax.php';
ставишь заголовок, ну и постепенно расширяешься до того, что нужно.
 

Exorcist

Новичок
Хорошо , спасибо. Завтра с утра буду мучать и пробывать . Если что будет не понятно, спрошу.
 

Exorcist

Новичок
Заменил json на text
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); 
                    } 
                }, 
                "text" 
            );
LOADING исчез, видно отработал success но в выпадющем меню пустота хотя он стал активом.

PHP:
  $.ajax({
        	  url: '/modules/goods/ajax.php',
        	  type: "GET",
        	  data: "city=John",
        	  success:function (result)
        	  {
                      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); 
              }
              
            
        	});
все так же как и выше.
Пробуем так
PHP:
  $.ajax({
        	  url: '/modules/goods/ajax.php',
        	  type: "GET",
        	  data: "city=John",
        	  success:function (result)
        	  {
                      var options = ''; 
                      options = '<option value="11">BDBBD</option>'; 
                      $('#region_id').html(options); 
                      $('#region_id').attr('disabled', false); 
              }
              
              
            
        	});
все удачно.

Возращаемся к нашему примеру выше в начале топике и ставим JSON
то
Syntax error at line 1 while loading: expected ';', got ':'
{"type":"success","regions"

ошибка в json_encode , ? или я неверно сделал файл ajax.PHP



На что мне тогда изменить
Я думаю что ему не нравится
Content-Type text/html; ? text/xml ?

потом пишешь статику
'/modules/goods/ajax.php';
ставишь заголовок, ну и постепенно расширяешься до того, что нужно.

Можно поподробней?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ну значит выясняй причину
Данный пример полностью рабочий
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);
 echo json_encode($result);
PHP:
<html>
<head>
<script type="text/javascript" src="/js/jquery-1.6.1.min.js"></script>
</head>
<body>
<script type="text/javascript">
 $.ajax({
      url: 'ajax.php',
      type: "GET",
    dataType: 'json',
      data: "city=John",
      success:function (result)
      {
$.each(result.regions, function(key, val) {
    alert(val.title);
  });
      }
    });
</script>
</body>

</html>
 

A1x

Новичок
дурацкая конечно мысль пришла в голову - в шаблонах смарти скрипты выводятся в {literal}?
 

Exorcist

Новичок
Да в литерал.

Всем спасибо, Алилуя все заработало. Много че нового узнал.
 
Сверху