2014-12-15 2 views
0

Я пытаюсь использовать CakePhp и JQuery Mobile вместе. Как правило, он отлично работает, но у меня есть огромная проблема с использованием перенаправления с одного контроллера на другой.Cakephp redirect не работает с jQuery mobile

Эпаклеально, так как я добавил RequestHandler.

Я думаю, что проблема в этом случае заключается в том, что JQuery Mobile ожидает целую строку строки, но контроллер просто возвращает представление.

Есть ли способ заставить функцию перенаправления работать с jQuery mobile?

В этом случае я хотел перенаправить от Orderheads к Orderpositions

Контроллер Orderheads

if ($this->request->is ('post')) { 
     $this->Orderhead->create(); 
     if ($this->Orderhead->saveAll ($this->request->data,array (
         'deep' => true 
       ))) { 
      $orderId = $this->Orderhead->findByOrdernumber($this->request->data['Orderhead']['ordernumber']); 

      $id =$orderId['Orderhead']['id']; 
      $this->Session->setFlash (__ ('The orderhead has been saved.')); 


      return $this->redirect (array (
        'controller' => 'orderpositions', 
        'action' => 'add', $id 
      )); 
     } else { 
      $this->Session->setFlash (__ ('The orderhead could not be saved. Please, try again.')); 
     } 
    } 

Контроллер Orderpositions

public $components = array (
     'Paginator', 
     'Session', 
     'RequestHandler' 
); 

public function add($id = null) { 
    if ($this->request->is ('ajax')) { 
     if ($this->RequestHandler->isAjax()) { 
      Configure::write ('debug', 0); 
     } 
     if (! empty ($this->data)) { 
      $this->autoRender = false; 
      $this->Orderposition->create(); 
      if ($this->Orderposition->save ($this->request->data)) { 
       echo 'Record has been added'; 
      } else { 
       echo 'Error while adding record'; 
      } 
     } 
    } else { 
     $this->loadModel ('Orderhead'); 
     if ($this->Orderhead->exists ($id)) { 
      $orderInformation = $this->Orderhead->findById ($id); 
     } else { 
      throw new NotFoundException (__ ('Invalid order id does not exists')); 
     } 
     $this->set (compact ('orderInformation')); 
    } 
} 
+0

if ($ this-> request-> is ('ajax')) и ($ this-> RequestHandler-> isAjax()) делают то же самое .. избегайте второго, возможно. – MouradK

+0

Thx, но эта проблема не может решить мою проблему :(. Я действительно уверен, что перенаправление не работает, потому что jquery mobile ожидает целую страницу, но получает только информацию VIEW из Controller-> redirect ... Is not есть ли способ сказать cakephp, что он должен отправить всю страницу? Я пробовал много разных вещей, но ничего не работало. Если я работаю со ссылками (rel = external), перенаправления не являются проблемой ... просто $ this-> функция перенаправления изнутри контроллера не работает :( – Sigurius

+0

Итак, я решил проблему сейчас. Невероятно, насколько легко было O_o Просто введите Data-Ajax = 'false' в Form-> create Options. форма-> создать ('COrderheads', массив ( \t \t \t \t \t \t 'данных Аякса' => 'ложь')); ?> – Sigurius

ответ

1

Хорошо, я решил эту проблему, мой сам ,

Как я думал, проблема была на мобильном сайте JQuery. JQuery Mobile обычно использует Ajax для связи.

Это или лучше сказано, проблема была в сочетании с потоком течения cakephp flowconzept, она не могла работать. Поскольку Jquery всегда ожидает всю страницу (информацию). Именно поэтому все мои ссылки с опцией rel = 'external' работали идеально.

КПП. Этот поведенческий подход - это то, почему вам нужен jQuery-Mobile-Subpage-Widget для использования нескольких страниц.

Но вернемся к теме, чтобы решить мою проблему с помощью функции controllers-> redirect, мне просто пришлось добавить параметр Data-Ajax = 'false' в параметр options функции Form-Create cakephp.

Если вы установили этот параметр, ссылка установит полностраничный запрос вместо ajax-request.

пример:

<?php 
    echo $this->Form->create('Contactperson', array(
          'data-ajax' => 'false')); 

    echo $this->Form->input('name'); 
    echo $this->Form->input('surname'); 
    echo $this->Form->input('email'); 

    echo $this->Form->end(__('Submit')); 
?> 

Я надеюсь, что это может помочь любому другому народу с той же проблемой, я wastet чертовски много времени с этим материалом.

+0

эй, вы отвечаете, это нормально для меня! спасибо –

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