2010-02-17 2 views
0

У меня есть форма, которая вызывается через пример входа fancybox plugin.Не удается получить доступ к данным из запроса jQuery Ajax, возвращает пустой массив

Вот код, у меня есть:

Форма:

<form method="post" action="" id="events_form"> 
    <p class="clearfix"><label for="Name">Name:</label> <input type="text" name="Name" id="Name" /></p> 
    <p class="clearfix"><label for="Company">Company:</label> <input type="text" name="Company" id="Company" /></p> 
    <p class="clearfix"><label for="Email">Email:</label> <input type="text" name="Email" id="Email" /></p> 
    <p class="clearfix"><label for="Tel">Tel:</label> <input type="text" name="Tel" id="Tel"/></p> 
    <p class="clearfix"><input type="submit" value="Submit details" /></p> 
</form> 

JavaScript/JQuery:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#event_trigger").fancybox({ 
      'padding' : 0, 
      'scrolling' : 'no', 
      'titleShow' : false, 
     }); 

     $("#events_form").bind("submit", function() { 
      $.fancybox.showActivity(); 

      $.ajax({ 
       type : "POST", 
       cache : false, 
       url : "/events/index.php", 
       data : $(this).serializeArray(), 
       success: function(data) { 
        $.fancybox(data); 
       } 
      }); 
      return false; 
     }); 
    }); 
</script> 

Отдача файл PHP и пустой массив. Однако вкладка post Firebug отображает данные формы.

Кроме того, я заметил, что если я

print_r($_SERVER['REQUEST_METHOD']) 

Это возвращает GET, даже если я указан POST.

+0

вы можете попробовать использовать функцию $ .post() –

+0

Я пытался использовать $ .post(), проблемы остаются, к сожалению, – Oldie

+0

Почему бы не использовать [jQuery form plugins] (http: //www.malsup. ком/JQuery/форма)? Это упростит вашу работу. –

ответ

0

$.ajax ожидает, что параметр data является объектом или строкой.

http://api.jquery.com/jQuery.ajax/ прокрутите вниз до данных.

Если вы оберните свой data в объект, например. data: {array:$(this).serializeArray()} это может сработать. Хотя я не уверен на 100%.

+0

Привет, спасибо за ваш ответ, к сожалению, обертывание данных не сработало. – Oldie

+0

Что вы можете получить, если вы добавите textStatus в свою функцию успеха, например. 'function (data, textStatus) {alert (textStatus);}'? – Nalum

+0

thats возвращает «Успех», тем не менее, пустой массив. – Oldie

0

Вы делаете запрос AJAX на форме submit.

Если запрос AJAX не синхронный (что я бы не рекомендовал, так или иначе), существует опасность того, что ваша форма будет отправлена ​​до того, как возникнет вероятность того, что запрос AJAX вернется.

В строке:

$(this).serializeArray() 

$ (это) имеет в виду выбранного в методе связывания в виде элемента. Я предполагаю, что это предназначено

+0

Привет, да, это предназначено. Я получил этот код из примера на http://fancybox.net/blog, и этот пример отлично работает. – Oldie

1
$(this).serializeArray() 

с именем формы CSS ID (# моя форма-ID, в данном примере), как это:

$("#my-form-ID").serializeArray() 

Надежда, которая решает ее. Это сработало для меня. ; -D

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