2012-06-14 1 views
0

Site here.

Почему код работает для $('#club').change(function(event), но не для $(document).ready(function()? Функции $.ajax идентичны, но первый просто ничего не делает.

<script type="text/javascript"> 

    $(document).ready(function() { 
     $.ajax({ 
      type: "post", 
      url: "eventinfo.php", 
      data: $(this).serialize(), 
      success: function(data) { 
       $('#right_inside').html('<h2>' + $('#club').val() + '<span style="font-size: 14px"> (' + data[0].day + ')</h2><p>Entry: ' + data[0].entry + '</p><p>Queue jump: ' + data[0].queuejump + '</p><p>Guestlist closes at ' + data[0].closing + '</p>'); 
       }, 
      dataType: "json" 
     }); 
    }); 

    $('#club').change(function(event) { 
     $.ajax({ 
      type: "post", 
      url: "eventinfo.php", 
      data: $(this).serialize(), 
      success: function(data) { 
       $('#right_inside').html('<h2>' + $('#club').val() + '<span style="font-size: 14px"> (' + data[0].day + ')</h2><p>Entry: ' + data[0].entry + '</p><p>Queue jump: ' + data[0].queuejump + '</p><p>Guestlist closes at ' + data[0].closing + '</p>'); 
       }, 
      dataType: "json" 
     }); 

    }); 

</script> 
+2

Показать свой HTML. Также объясните, как он «не работает». Сообщение об ошибке? –

+0

Я посмотрел страницу, когда пользователь выбирает 'Let's kill disco @ Lola Lo', ничего не происходит. Итак, у меня возникает ощущение, что это не проблема с вашим jquery, это проблема с записью в поле выбора '# club'. –

+0

Значения «id» ваших элементов не должны содержать пробелов. – Pointy

ответ

4

запрос делается. это легко проверить, проверив вкладку Сеть в Chrome Инструменты разработчика. Она возвращает пустой массив, такой как data = []. Таким образом, data[0].day выдает ошибку и эта ошибка не является высота глаза наблюдателя

Разница между двумя блоками кода заключается в том, что содержится в переменной this. В первом случае это объект jQuery, содержащий ваш document. Во втором - объект jquery, содержащий элемент <select> с идентификатором club. Поскольку вы хотите сериализовать один и тот же элемент в своем $(document).ready, все, что вам нужно сделать, это изменить $(this) на $(#club).

+0

Я просто пробовал это, но он не работает. Существуют ли какие-либо другие несоответствия, которые могут вызывать проблемы? –

+0

@SebastianSalek Ну, вы исправили ошибку, так что теперь она корректно публикует данные на сервере на готовом документе. Но есть еще одна ошибка (серверная сторона), где 'Let's Kill Disco @ Lola Lo' не распознается. Хотя все остальные записи в выпадающем списке. – Paulpro

+0

@SebastianSalek Для всех остальных записей в выпадающем списке возвращается массив JSON, содержащий один объект (с содержимым). Для первой записи возвращается пустой массив, и вы получите сообщение об ошибке. Вы заметите, что если вы отключаетесь от первой записи, а затем обратно, на вашей странице ничего не меняется. Это из-за ошибки Javascript. – Paulpro

2

Что это такое, что вы ожидаете $(this) обратиться в «готов» обработчик? В „изменить“ обработчика, это то, что „“ элемент. В „#club готов“ обработчика, это будет что-то вероятно, бесполезно.

Вместо $(this).serialize() Я думаю, что вы хотите в «готовом» обработчиком $('#club').serialize().

1

Ваша проблема в вашем HTML-коде.

<select id="club" class="dropdown" name="club"> 
    <option id="Let" lo'="" lola="" @="" disco="" kill="" s="">Let's Kill Disco @ Lola Lo</option> 
    <option id="Fuzzy Logic @ The Place">Fuzzy Logic @ The Place</option> 
    <option id="BOOM! @ The Place">BOOM! @ The Place</option> 
    <option id="Fuzzy Logic @ Ballare">Fuzzy Logic @ Ballare</option> 
    <option id="Jelly Baby @ Ballare">Jelly Baby @ Ballare</option> 
    <option id="Fiesta @ Fez">Fiesta @ Fez</option> 
</select> 

Посмотрите на первую запись. Это не работает, потому что идентификатор не существует, и теги все испорчены. Убедитесь, что вы избегаете своих котировок, когда вы добавляете свои события в свой список. Когда вы это сделаете, ваш запрос jQuery $.ajax должен работать нормально.

+0

Хотя это проблема и ее необходимо исправлять, она не решает проблему, потому что jquery Serialize не использует 'id'. – Paulpro

+0

Правда, но после сериализации и десериализации, возможно, если 'eventinfo.php' не может вернуть правильный результат, он ничего не возвращает. Но, видя, что все это сериализовано, это, безусловно, стоит исправить. –

Смежные вопросы