Yii Framework Forum: Wieloktrotne wysyłanie POSTa - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Wieloktrotne wysyłanie POSTa Rate Topic: -----

#1 User is offline   lograiden 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-November 11
  • Location:Poland

Posted 28 February 2012 - 07:04 PM

Ok, krótka piłka, to kod akcji pliku panelController.php:
public function actionResponse()
    {
        $data = array();
        $data["data"] = $_POST['field'] . PHP_EOL;
        $this->renderPartial('panelAjax', $data, false, true);
    }


to panelAjax.php:
<?php echo CHtml::beginForm('Panel/Response'); ?>
        <?php echo CHtml::ajaxSubmitButton('Send', CController::createUrl('Panel/Response'), array('update' => '#server-response'), array('id' => 'send-button-answer', 'class' => 'submit styled-button')); ?>
    
        <p class="field switch" id=''>
            <input type="radio" id="answerY" name="field" value="yes", class="hidden" checked />
            <input type="radio" id="answerN" name="field" value="no", class="hidden"/>
            <label for="answerY" class="cb-enable selected"><span>Yes</span></label>
            <label for="answerN" class="cb-disable"><span>No</span></label>
        </p>    
    <?php echo CHtml::endForm(); ?>


a to panel.php
<div id="server-response">
        </div>


No i po każdym naciśnięciu przycisku Send podwaja mi się liczba requestów:
Requests
stronka wygląda tak:
Strona

Co jest tego powodem? Od razu powiem że radio buttony i przycisk muszę generować dynamicznie.
0

#2 User is offline   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 210
  • Joined: 08-July 09
  • Location:Poland

Posted 29 February 2012 - 02:39 AM

Wydaje mi się, że był zgłoszony już podobny błąd albo w trakerze google code, albo na forum. Żadne z linków z Twojego postu mi się nie otwiera. Zakładam, że za każdym razem kiedy renderujesz formularz, dopisywana jest funkcja obsługi zdarzenia click, ale stare zostają. Poszukaj w dziale angielskim tego forum, na szybko jednak spróbuj tak:
 <?php echo CHtml::ajaxSubmitButton('Send', CController::createUrl('Panel/Response'), 
array('update' => '#server-response',
'beforeSend'=>"function(){$('body').undelegate('#send-button-answer', 'click');}" ), 
array('id' => 'send-button-answer', 'class' => 'submit styled-button')
); ?>
 


można też odłączać stare zdarzenia w zdarzeniu success, bo jeżeli beforeSend z jakieś przyczyny nie wyśle się, to guzik już nie będzie działać...

Uważaj też z PHP_EOL. Dane są wysyłane wielokrotnie do klienta i przetwarzane w jakiś tam sposób przez javascript (ajax chociażby) może się okazać, że zawartość $_POST['field'] jest inna niż oczekiwana.
PHP_EOL używa znaków końca linii właściwych dla serwera. Klient może mieć (i w większości przypadków ma :) ) przecież inny system. Rozważ wpakowanie tam '\n'.
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
1

#3 User is offline   lograiden 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-November 11
  • Location:Poland

Posted 29 February 2012 - 08:25 AM

Odnośniki do zdjęć poprawione (wcześniejsze na początku też działały, ale hosting chyba się rozmyślił).

Twój kod działa, wielkie dzięki :)

Poprawiłam też PHP_EOL, dzięki za zwrócenie uwagi :)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users