Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> По событию onchange отправить данные на сервер, Не могу отправить на сервер данные. 
V
    Опции темы
Marlik
Дата 3.10.2013, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Цитата(kin @ 3.10.2013,  16:34)
Цитата(Marlik @  3.10.2013,  16:13 Найти цитируемый пост)
Данные приходят в json формате. Вижу в отладчике. Образец:
{ 34: "?????? ?????", ... }
Свой код
Код

var response    =JSON.stringify(msg)
response        =JSON.parse(response)

замените на
Код

var response =JSON.parse(msg)

После этого в отладчике посмотрите содержимое объекта  response 
Скорее всего это будет асоциативный массив вида [ключ:значение].  В данном примере 34 это ключ, а ????? - значение, а все вместе  это объект, браузер это и показывает.

Ну так он что так, что так - ассоциативный массив. Только без stringify во второй селект ничего не попадает... и дальше попробовать ваш код воткнуть? Я уже нагуглился так что тошно... и допер что это обьект, только проблема в том что из обьекта дергать в теории можно, а в моем случае никак... ))) 

Например:

Код

var user = {
  name: "Вася",
  age: 25
};
 
var str = JSON.stringify(user, function(key, value) {
  if (key == 'бла-бла') return undefined;
  return value;
} );
 
alert(str); // {"name":"Вася","age":25}


А как мне выдернуть из обьекта ключ и содержимое? Вопрос еще тот...
PM WWW Skype   Вверх
kin
Дата 3.10.2013, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 9.5.2008

Репутация: 2
Всего: 6



Цитата(Marlik @  3.10.2013,  16:49 Найти цитируемый пост)
Только без stringify во второй селект ничего не попадает... 
 Во-первых, что приходит с сервера? Если я правильно понял, то это данные в ФОРМАТЕ JSON. А теперь попробуйте мне объяснить с какого перепуга, Вы решили, что нужно использовать метод JSON.stringify, в  описании которого говорится,  что он  преобразовывает («сериализует») значение в JSON-строку
Во-вторых:
Цитата(Marlik @  3.10.2013,  16:49 Найти цитируемый пост)
А как мне выдернуть из обьекта ключ и содержимое? Вопрос еще тот... 
Легко!
Код

   for (var key in response)
       alert(key+"="+response[key]);

Смысл кода, думаю, понятен без комментариев..., добавьте в цикл код, котрый создает объекты OPTION и получите то, что Вам нужно...


Это сообщение отредактировал(а) kin - 3.10.2013, 19:37
PM MAIL   Вверх
Marlik
Дата 4.10.2013, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



К сожалению ваша конструкция не работает, то есть просто ничего не происходит. Я кстати просто ради экспериента вставил JSON.stringify подумал что вдруг данные все-таки не в json формате приходят, и с такой строкой кстати хоть что-то появлялось в селекткте. Получается наверное так, я получаю объект, в котором неизвестны ни ключ, ни значение. Вот сейчас как у меня все выглядит:

Код

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script type="text/javascript">
$(function(){

$('#country').change(function(){
   
    var country = $(this).val()   
    
    var request = $.ajax({

      url: "./cgi-bin/city.cgi",

      type: "GET",

      data: { country : country },

    });
    
    request.done(function( msg ) {

    var response        =JSON.parse(msg)

      var cityEl     = $('#state')
    
      cityEl.empty()
      
      $.each(response, function(){

         cityEl.append('<option>' + $(this) + '</option>')              
     

 })
    });
 
})


}); 
</script>




Код

<div>
<div id="first">
    <select name="country" id="country">
    <option value="">Выберите страну &raquo;</option>
      <option value="1">Россия</option>                                            
          <option value="2">Украина</option>                                           
          <option value="3">Абхазия</option>                                           
          <option value="4">Австралия</option>                                         
          <option value="5">Австрия</option>                                           
          <option value="6">Азербайджан</option>                                       
          <option value="7">Албания</option>                                           
          <option value="8">Алжир</option>                                             
          <option value="9">Ангола</option>        
</select>
</div>
<div id="second">
    <select name="state" id="state">
    <option value="">Выберите область &raquo;</option>
    </select>
</div>    
<div id="three">
    <select name="town" id="town">
    <option value="">Выберите город &raquo;</option>
    </select>
</div>    
</div>



Интересно... почему в этой строке синтаксическую ошибку выдает:

Код

var response   = JSON.parse(msg)


Uncaught SyntaxError: Unexpected token o reg.html:34 (anonymous function)



Это сообщение отредактировал(а) Marlik - 4.10.2013, 10:40
PM WWW Skype   Вверх
Marlik
Дата 4.10.2013, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Убрал эту строку и все заработало:

Код

var response   = JSON.parse(msg)


Сделал так(Не знаю правильно-ли?):

Код

var response  = (msg)


И все заработало!

Окончательный скрипт выглядит так:

Код

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script type="text/javascript">

$(function(){

$('#country').change(function(){
   
    var country = $(this).val()   
    
    var request = $.ajax({
      url: "./cgi-bin/city.cgi",
      type: "GET",
      dataType : "json",
      data: { country : country }
    });
    
    request.done(function( msg ) {

    var response = msg 
    
      var cityEl     = $('#state')
      cityEl.empty()
      
      $.each(response, function(){
      
       for (var key in response)
   
      townEl.append('<option value='+ key + '>' + response[key] + '</option>')        
     
})
   });
 
      })

        }); 

</script>



Вот cgi скрипт написан на perl, вдруг кому надо:

Код

#!/usr/bin/perl -w
    $| = 1;
    use strict;
    use CGI;.....
    use DBI;
    use JSON::PP;

    my $cgi = new CGI;
....
    my %part;
    my $hash_ref = \%part;
    my $state = $cgi->param( 'country' );

    my $db = 'База';
    my $host = 'localhost';
    my $user = 'marlik';
    my $passwd = '**********';

    my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $passwd) || die "$!";
    my $sth=$dbh->prepare("select id_region, name from region where id_country='$state'");
    $sth->execute;........
<------>....
    while(my($key, $value) = $sth->fetchrow()){
    $part{$key} = "$value";
}
    $sth->finish;
    $dbh->disconnect;
...
    $hash_ref = encode_json $hash_ref;

    print $cgi->header(-type => "application/json", -charset => "utf-8");
    print "$hash_ref";
.....
    exit();




Спасибо kin, за поддержку.



Это сообщение отредактировал(а) Marlik - 6.10.2013, 15:06
PM WWW Skype   Вверх
Marlik
Дата 4.10.2013, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Нифига не работает правильно... вместо ключа вставляет слово key

Вот тут.

Код

 $.each(response, function(){
 
       for (var key in response){
      
        townEl.append('<option value='+ key + '>' + response[key] + '</option>')              
     }
})


Как вставить ключ? Хэлп!!!

И по моему криво написано, получается внутри цикла запустил еще один. Переписал так:


Код

 $.each(response, function(name, value){    

 townEl.append('<option value='+ name + '>' + value + '</option>')              
  
})







Это сообщение отредактировал(а) Marlik - 5.10.2013, 03:31
PM WWW Skype   Вверх
Marlik
Дата 6.10.2013, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Вопрос решен, переделал так и заработало:

Код
   
    for (var key in response){
   
      cityEl.append('<option value=' + key + '>' + response[key] + '</option>')              
     
}



Всем кто помогал, спасибо.
PM WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0760 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.