CakePHP ajax с Js Helper загружает страницу, а не шаблон для успеха, почему? - PullRequest
0 голосов
/ 10 февраля 2012

Я пытаюсь отправить форму через ajax и JsHelper из CakePHP 1.3

Я пытаюсь позвонить /eng/feedbacks/submit_feedback, но вместо этого в консоли я вижу сообщение для http://lang/eng/pa/homepage,Возвращенный результат - другой экземпляр этой страницы, а не что-либо еще.

Это, кажется, не имеет отношения к тому, существует ли такой submit_feedback или нет.Я начал это действие с die("test");, и оно ничего не меняет.

почему, что происходит?

форма находится в моем макете (как я хочу, чтобыбыть в моем нижнем колонтитуле).Выполняется, когда URL-адрес /eng/pa/homepage

Код формы:

echo $this->Form->create('Feedback', array('url'=>array( 'controller'=>'feedbacks', 'action'=>'submit_feedback')));
echo $this->Form->input('Feedback.content', array('label'=>false, 'type'=>'textarea'));
echo $this->Js->submit('Save', array('class'=>'button blue',
                            'before'=>$this->Js->get('#sending')->effect('fadeIn'),
                            'success'=>$this->Js->Get('#sending')->effect('fadeOut'),
                            'update'=>'#success'
                        ));
echo $this->Form->end();?>
<div id="success">xx</div>

В этом #success DIV я получаю связанную полную страницу, а не то, что я определил в действии контроллера

Метод контроллера:

function submit_feedback(){
    if(!empty($this->data)){
        $this->Feedback->set($this->data);
        if($this->Feedback->validates()){
            if($this->Feedback->save($this->data)){
                // AJAX
                if($this->RequestHandler->isAjax()){
                    $this->render('/feedbacks/success', 'ajax');
                }else{
                    die('not ajax');
                    }

            }
            }
        }
}

И шаблон успеха:

<p style="background: lightgreen">Purple cow!</p>

Что я делаю не так?

ПРИМЕЧАНИЕ: если я запускаю ту же форму со страницы /eng/feedbacks/submit_feedback, она работает точно так же, как и через ajax, и моя база данных обновляется, я загружаю необходимый шаблон «success» и все блестит исчастливый.

ОБНОВЛЕНИЕ: ОБРАЗЕЦ КОДА ИСТОЧНИКА ФОРМЫ:

<form accept-charset="utf-8" action="/eng/feedbacks/submit_feedback" method="post" id="FeedbackReadForm">
<div style="display: none;">
    <input type="hidden" value="POST" name="_method">
</div>
<input type="hidden" id="FeedbackUserId" value="141" name="data[Feedback][user_id]">
<div class="input radio">
    <input type="hidden" value="" id="FeedbackType_" name="data[Feedback][type]">
    <input type="radio" value="suggestion" id="FeedbackTypeSuggestion" name="data[Feedback][type]">
    <label for="FeedbackTypeSuggestion">Suggestion</label>
    <input type="radio" value="problem" id="FeedbackTypeProblem" name="data[Feedback][type]">
    <label for="FeedbackTypeProblem">Poblem</label>
    <input type="radio" value="opinion" id="FeedbackTypeOpinion" name="data[Feedback][type]">
    <label for="FeedbackTypeOpinion">Other Opinion</label>
</div>
<div class="input textarea">
    <textarea id="FeedbackContent" rows="6" cols="30" name="data[Feedback][content]"></textarea>
</div>
<div style="margin-top: 17px; margin-right: 50px;" class="right">
    <a onclick="javascript: closeFeedbackPuller(); return false;" href="#">Cancel</a>
</div>
<div class="submit">
    <input type="submit" value="Save" id="submit-396027771" class="button blue">
</div>
</form>

ОБНОВЛЕНИЕ 2: Сгенерировано JS:

$(document).ready(function () {
$("#submit-396027771").bind("click", function (event) {
    $.ajax({
        beforeSend:function (XMLHttpRequest) {
            $("#sending").fadeIn();
        }, 
        data:$("#submit-396027771").closest("form").serialize(), 
        dataType:"html", 
        success:function (data, textStatus) {
            $("#sending").fadeOut();
            $("#success").html(data);
        }, 
        type:"post", 
        url:"\/eng\/pa\/homepage"
    });
    return false;
});
});

Я вижу, что URL-адрес неправильный, даже считая URL-адрес формыбыл прав.Как это можно решить?

1 Ответ

0 голосов
/ 10 февраля 2012
echo $this->Js->submit('Save', array('class'=>'button blue',
                        'before'=>$this->Js->get('#sending')->effect('fadeIn'),
                        'success'=>$this->Js->Get('#sending')->effect('fadeOut'),
                        'url' => '/eng/feedbacks/submit_feedback',
                        'update'=>'#success'
                    ));

Это может решить твою проблему, но я не уверен на 100%. Похоже, что метод Js-> submit () принимает много вспомогательных методов Form.

...