2013-12-22 1 views
0

У меня есть простой пост, который выглядит какZF2: Переадресация вызова() url | триггер GET из почтового действия

$.ajax({ 
     url: '/album/createAlbum.html', 
     type: 'POST', 
     dataType: 'json', 
     async: true, 
     data: postData, 
     success: function (data) { 
      console.log("Successfully saved album"); 
      console.log(data); 
      return data; 
     }, 
     error: function (data) { 
      console.log("FAILED to save album"); 
      return false; 
     } 
    }); 

и простое действие, которое выглядит как

public function createAlbumAction() 
{ 
    $request = $this->getRequest(); 
    $response = $this->getResponse(); 

    $album  = $request->getPost('album'); 

    //First check to see if the user already has that album 
    $albumObject = $this->_dataService->getAlbum($userID, $album); 

    if ($albumObject){ 
     //This is the issue 
     $this->redirect()->toRoute('albumModule', array('controller' => 'album', 'action' => 'edit')); 
    } else { 
     $albumObject = $this->_dataService->createAlbum($userID, $album); 
    } 


    $messages = array(); 
    if (!empty($messages)){ 
     $response->setContent(\Zend\Json\Json::encode($messages)); 
    } else { 
     $response->setContent(\Zend\Json\Json::encode(array('albumID' => $albumObject->getAlbumID()))); 
    } 
    return $response; 
} 

Проблема у меня есть на redirect(), я знаю, что перенаправление отправит меня на этот маршрут, но я должен сообщить обозревателю об этом маршруте GET. Я не могу понять, как это сделать с POST. Я прочитал кое-что о том, как настроить заголовок на 303, чтобы браузер знал, что нужно перенаправить, но я не знаю, как вернуть это в ответ на JSON.

Даже когда я пытаюсь сделать header:("Location: " ...), что не укажет браузеру ПОЛУЧИТЬ URL.

+1

Если вы хотите перенаправить пользователя на другую страницу, возможно, потребуется делать с Java Script. Итак, верните некоторый статус в ответе Ajax и выполните перенаправление в JS. – tasmaniski

+0

@ tasmaniski k, я могу это сделать. Просто жаль, что есть простой способ сделать это с сервера :( – Jordan

ответ

0

Я просто в конечном итоге происходит с этим

На АЯКС вызова

error: function (request, textStatus, errorThrown) { 
     console.log("FAILED to save album"); 

     //The Album already exists, so redirect to it 
     window.location = request.getResponseHeader('redirectURL'); 
     return false; 
     }, 


На ZF2 действий

$response->setStatusCode(Response::STATUS_CODE_301)->getHeaders() 
     ->addHeaders(array('redirectURL' => $this->url()->fromRoute('albumModule', array('controller' => 'album', 'action' => 'edit', 'id' => $albumObject->getAlbumID())))); 
return $response; 
Смежные вопросы