Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2012, 09:06
Аспирант
Отправить личное сообщение для namez Посмотреть профиль Найти все сообщения от namez
 
Регистрация: 21.11.2008
Сообщений: 52

Обработка массива, ajax
Здравствуйте!

С помощью .ajax получаю php массив, не подскажете как его обработать?
Нужно в цикле посмотрить option'ы

Вот такой массив:

Array ( [result] => Array ( [173] => Санкт-Петербург [174] => Александровская [175] => Бокситогорск [176] ))


Вот так получаю:

$('.setCity').change(function()
{
   
   var shop_location_id = $(this).val();

   $.ajax({
          type: "GET",
          url: "/address/",
          data: "action=city&shop_location_id="+ shop_location_id,
          success: function(res){

          var options = '';

         // вот здесь нужно в цикле построить option'ы
         // пример: <option value = "173">Санкт-Петербург</option>

          }
        });

});



Подскажите пожалуйста.

Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 24.02.2012, 11:59
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

а на кой вы на клиент php массив передаёте, javascript не умеет работать с php массивами.
преобразуйте ваш массив в формат json и передайте его на клиент именно в этом формате.

собственно нужна то одна строчка на стороне сервера.
echo json_encode ( $myArray );

=================================
На клиенте распарсить данные можно
var dat=jQuery.parseJSON(res).
а потом работайте с dat как с массивом.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 24.02.2012 в 12:05.
Ответить с цитированием
  #3 (permalink)  
Старый 24.02.2012, 12:23
Аспирант
Отправить личное сообщение для namez Посмотреть профиль Найти все сообщения от namez
 
Регистрация: 21.11.2008
Сообщений: 52

Сообщение от DjDiablo Посмотреть сообщение
а на кой вы на клиент php массив передаёте, javascript не умеет работать с php массивами.
преобразуйте ваш массив в формат json и передайте его на клиент именно в этом формате.

собственно нужна то одна строчка на стороне сервера.
echo json_encode ( $myArray );
Спасибо вам. А не подскажете как в цикле сделать option'ы?

Данные теперь такие:


{"558":"\u0411\u0430\u0431\u0430\u0435\u0432\u043e","559":"\u0411\u0435\u043b\u043e\u0437\u0435\u0440\u0441\u043a","560":"\u0412\u0435\u043b\u0438\u043a\u0438\u0439 \u0423\u0441\u0442\u044e\u0433","561":"\u0412\u0435\u0440\u0445\u043e\u0432\u0430\u0436\u044c\u0435","562":"\u0412\u043e\u0436\u0435\u0433\u0430","563":"\u0412\u043e\u043b\u043e\u0433\u0434\u0430","564":"\u0412\u043e\u0445\u0442\u043e\u0433\u0430","565":"\u0412\u044b\u0442\u0435\u0433\u0440\u0430","566":"\u0413\u0440\u044f\u0437\u043e\u0432\u0435\u0446","567":"\u041a\u0430\u0434\u043d\u0438\u043a\u043e\u0432","568":"\u041a\u0430\u0434\u0443\u0439","569":"\u041a\u0438\u0447\u043c\u0435\u043d\u0433\u0441\u043a\u0438\u0439 \u0413\u043e\u0440\u043e\u0434\u043e\u043a","570":"\u041b\u0438\u043f\u0438\u043d \u0411\u043e\u0440","571":"\u041d\u0438\u043a\u043e\u043b\u044c\u0441\u043a","572":"\u041d\u044e\u043a\u0441\u0435\u043d\u0438\u0446\u0430","573":"\u0421\u043e\u043a\u043e\u043b","574":"\u0421\u044f\u043c\u0436\u0430","575":"\u0422\u0430\u0440\u043d\u043e\u0433\u0441\u043a\u0438\u0439 \u0413\u043e\u0440\u043e\u0434\u043e\u043a","576":"\u0422\u043e\u0442\u044c\u043c\u0430","577":"\u0423\u0441\u0442\u044e\u0436\u043d\u0430","578":"\u0425\u0430\u0440\u043e\u0432\u0441\u043a","579":"\u0427\u0430\u0433\u043e\u0434\u0430","580":"\u0427\u0435\u0440\u0435\u043f\u043e\u0432\u0435\u0446","581":"\u0428\u0435\u043a\u0441\u043d\u0430","582":"\u0428\u0443\u0439\u0441\u043a\u043e\u0435"}



$('.setCity').change(function()
{
   
   var shop_location_id = $(this).val();

   $.ajax({
          type: "GET",
          url: "/address/",
          data: "action=city&shop_location_id="+ shop_location_id,
          success: function(res){

          var options = '';

         // вот здесь нужно в цикле построить option'ы
         // пример: <option value = "173">Санкт-Петербург</option>

          }
        });

});
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2012, 12:53
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

$('.setCity').change(function()
{
   
   var shop_location_id = $(this).val();

   $.ajax({
          type: "GET",
          url: "/address/",
          data: "action=city&shop_location_id="+ shop_location_id,
          dataType : 'json',
          success: function(res){

          var options = [];
          for ( var value in res ) {
              if ( res.hasOwnProperty( value ) ) {
                    options.push( 'value="' + value + '">' + res[ value ] );
              }
          }
          alert('<option ' + options.join('</option><option ') + '</option>';)
         // вот здесь нужно в цикле построить option'ы
         // пример: <option value = "173">Санкт-Петербург</option>

          }
        });

});
Ответить с цитированием
  #5 (permalink)  
Старый 24.02.2012, 13:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

namez,
Вариант ...
<!DOCTYPE >
<html>
<head>
  <title></title>
</head>
<body>
<select name="lang1" ></select>
<script type="text/javascript">
 var res = {
    "558": "\u0411\u0430\u0431\u0430\u0435\u0432\u043e",
    "559": "\u0411\u0435\u043b\u043e\u0437\u0435\u0440\u0441\u043a",
    "560": "\u0412\u0435\u043b\u0438\u043a\u0438\u0439 \u0423\u0441\u0442\u044e\u0433",
    "561": "\u0412\u0435\u0440\u0445\u043e\u0432\u0430\u0436\u044c\u0435",
    "562": "\u0412\u043e\u0436\u0435\u0433\u0430",
    "563": "\u0412\u043e\u043b\u043e\u0433\u0434\u0430",
    "564": "\u0412\u043e\u0445\u0442\u043e\u0433\u0430",
    "565": "\u0412\u044b\u0442\u0435\u0433\u0440\u0430",
    "566": "\u0413\u0440\u044f\u0437\u043e\u0432\u0435\u0446",
    "567": "\u041a\u0430\u0434\u043d\u0438\u043a\u043e\u0432",
    "568": "\u041a\u0430\u0434\u0443\u0439",
    "569": "\u041a\u0438\u0447\u043c\u0435\u043d\u0433\u0441\u043a\u0438\u0439 \u0413\u043e\u0440\u043e\u0434\u043e\u043a",
    "570": "\u041b\u0438\u043f\u0438\u043d \u0411\u043e\u0440",
    "571": "\u041d\u0438\u043a\u043e\u043b\u044c\u0441\u043a",
    "572": "\u041d\u044e\u043a\u0441\u0435\u043d\u0438\u0446\u0430",
    "573": "\u0421\u043e\u043a\u043e\u043b",
    "574": "\u0421\u044f\u043c\u0436\u0430",
    "575": "\u0422\u0430\u0440\u043d\u043e\u0433\u0441\u043a\u0438\u0439 \u0413\u043e\u0440\u043e\u0434\u043e\u043a",
    "576": "\u0422\u043e\u0442\u044c\u043c\u0430",
    "577": "\u0423\u0441\u0442\u044e\u0436\u043d\u0430",
    "578": "\u0425\u0430\u0440\u043e\u0432\u0441\u043a",
    "579": "\u0427\u0430\u0433\u043e\u0434\u0430",
    "580": "\u0427\u0435\u0440\u0435\u043f\u043e\u0432\u0435\u0446",
    "581": "\u0428\u0435\u043a\u0441\u043d\u0430",
    "582": "\u0428\u0443\u0439\u0441\u043a\u043e\u0435"
};
var a = document.getElementsByName("lang1")[0]
for (var c in res) a.options[a.options.length] = new Option(res[c],c );
</script>
</body>

</html>
Ответить с цитированием
  #6 (permalink)  
Старый 24.02.2012, 13:44
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

красиво =)
Ответить с цитированием
  #7 (permalink)  
Старый 24.02.2012, 14:29
Аспирант
Отправить личное сообщение для namez Посмотреть профиль Найти все сообщения от namez
 
Регистрация: 21.11.2008
Сообщений: 52

рони спасибо.


А я обработал так, не знаю какой метод лучше, показался более по-jquery'вски

success: function(res){
          var options = '';
          $.each(res, function(key, val){
          options += '<option value="' + key + '">' + val + '</option>';
          });

          $("select").html(options);

          }

Последний раз редактировалось namez, 24.02.2012 в 14:34.
Ответить с цитированием
  #8 (permalink)  
Старый 25.02.2012, 09:47
Аспирант
Отправить личное сообщение для namez Посмотреть профиль Найти все сообщения от namez
 
Регистрация: 21.11.2008
Сообщений: 52

Друзья подскажите. У меня в массиве новый параметр. city (в конце)

{"result":{"210":"\u041f\u0443\u0448\u043a\u0438\u043d","211":"\u0421\u0435\u0441\u0442\u0440\u043e\u0440\u0435\u0446\u043a","212":"\u0421\u043b\u0430\u043d\u0446\u044b","213":"\u0421\u043e\u0441\u043d\u043e\u0432\u044b\u0439 \u0411\u043e\u0440","214":"\u0422\u0438\u0445\u0432\u0438\u043d","215":"\u0422\u043e\u0441\u043d\u043e","216":"\u0428\u043b\u0438\u0441\u0441\u0435\u043b\u044c\u0431\u0443\u0440\u0433"},"city":"\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433"}


Сейчас я обрабатываю {result} так:

success: function (res)
        {
          var selected = res.city;
          $.each(res.result, function (key, val)
          {
            // здесь нужно сделать условие, если val = selected то <option selected=selected>
            options += '<option value="' + key + '">' + val + '</option>';
          });
        }



А как сделать так чтобы при проверке если val = selected то такой option будет иметь атрибут selected=selected ?
Ответить с цитированием
  #9 (permalink)  
Старый 25.02.2012, 10:24
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

ну добавь ?:
options += '<option value="' + key + '" '+((val == selected)?'selected=selected':'')+'>' + val + '</option>';
Ответить с цитированием
  #10 (permalink)  
Старый 25.02.2012, 10:29
Аспирант
Отправить личное сообщение для namez Посмотреть профиль Найти все сообщения от namez
 
Регистрация: 21.11.2008
Сообщений: 52

Сообщение от Rootpassword Посмотреть сообщение
ну добавь ?:
options += '<option value="' + key + '" '+((val == selected)?'selected=selected':'')+'>' + val + '</option>';
Спасибо! Да я так и делал, только что-то ошибки лезли в фаербаге, я уже и так и так подумал что не судьба. Понял ошибку. Спасибо еще раз!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX возвращение массива zeraid jQuery 15 15.06.2016 05:46
Обработка массива элементов формы и сохранение Viper jQuery 0 19.01.2012 16:04
Обработка данных во время AJAX запроса user783 AJAX и COMET 5 09.12.2011 03:24
Ajax запрос. Возврат массива. Rinas jQuery 5 09.04.2011 18:58
AJAX. Возвращение массива HTML Neil AJAX и COMET 9 12.02.2009 16:00