2012-04-25 4 views
2

Я показываю обратную связь и оценку для конкретной сущности, которая показана как вкладка изначально. Когда пользователь нажимает на вкладку, я получаю обратную связь и оценку с помощьюWeird JavaScript type casting

$.get() 

Возвращение $.get() это что-то вроде этого

some arbit html|||8 

Эти данные я Расщепление с помощью ||| и получить рейтинг, который 8 в этом случае.

 $.get('prevfeed.php',{text:text},function(data){ 
     data = data.split("|||"); 

     $('#prevFeedback').html(data[0]); 
     $('body').data('rating', parseInt(data[1])); 
     alert(parseInt(data[1])+1); 
    }); 

Проблема здесь. Я использую этот plugin, чтобы показать рейтинг звезд. Ниже приведен код инициализации

 $('#star').raty({ 
     readOnly: true, 
     number : 10, 
     start: $('body').data('rating') 
    }); 

Независимо от того, что я делаю Оценка не работает. Если я поставил число вместо $('body').data('rating'), он работает нормально.

Первоначально я попытался установить значение скрытого поля ввода с помощью $('body').data('rating'), а затем назначить начало с val поля ввода. Но это бесполезно.

Заранее спасибо

P.S: Видя ответы я редактировал мой код

 $('#star').raty({ 
      readOnly: true, 
      number: 10, 
      start: function() { alert($('body').data('rating'););return $('body').data('rating'); } 

Когда я включаю сигнал тревоги, он работает. Это похоже на то, что я просто должен уничтожить этот код. Как это сделать. });

+0

Если вы замените 'parseInt (data [1]) + 1' в своем' alert' на '$ ('body'). Data ('rating'). ', вы получаете правильную вещь в оповещении? –

+0

Вы уверены, что данные «оценки» были установлены к моменту инициализации плагина? Это может быть вопросом не срабатывания функций, когда вы ожидаете их, поэтому плагин raty может быть инициализирован (с неопределенным значением) перед битами, которые определяют, какие данные. –

ответ

4

Это потому, что код, в котором вы устанавливаете атрибут rating на body, задерживается до завершения вызова AJAX.

Однако вы начнете использовать плагин raty при загрузке страницы; где атрибут данных rating по-прежнему равен undefined.

Вы должны задержать инициализацию плагина, пока вызов AJAX не завершен:

$.get('prevfeed.php', { 
    text: text 
}, function(data) { 
    data = data.split("|||"); 

    $('#prevFeedback').html(data[0]); 
    $('body').data('rating', parseInt(data[1])); 

    $('#star').raty({ 
     readOnly: true, 
     number: 10, 
     start: $('body').data('rating') 
    }); 
});​ 
+1

Я собирался написать то же самое решение: P –

+0

Просто чтобы добавить к этому, в зависимости от того, что вы хотите сделать (@Napster), вы можете инициализировать raty с помощью 0 и использовать решение @Matt для обновления, когда правильное значение ready :) – DiogoNeves

+0

теперь im получаю эту ошибку, как $ ("# star"). raty не является функцией для вышеуказанного кода –

0

Решение, которое Мэтт дал должно работать. Другим решением может быть: при нажатии на вкладку вы извлекаете данные из prevfeed.php и пытаетесь установить рейтинг соответствующим образом.

Вы можете попробовать это вместо этого.

При нажатии на вкладку:

$("#star").raty ({ 
readonly: true, 
number: 10, 
start: function(){ 
//get the rating now, 
$.get('prevfeed.php',{text:text},function(data){ 
     data = data.split("|||"); 

     $('#prevFeedback').html(data[0]); 
     $('body').data('rating', parseInt(data[1])); 
    }); 
//Now you got the rating, just return it 
return $('body').data('rating'); 
} 
} 
); 

P.S. Я не пробовал, но он должен работать;)

+0

это тоже не работает. в то время как я получаю ошибку с вышеупомянутым ответом, о котором я прокомментировал. Этот ответ не возвращает никакой ошибки, но рейтинг пока не работает –