2014-11-04 2 views
2

Вот мой Javascript snipetHandle массив JSON CakePHP

<script type="text/javascript"> 
$(document).ready(function() { 
     $('form#FormId button.btn').click(function(event){ 
      $.ajax({ 
       type: "POST", 
       url: "/controller/edit", 
       data: $("#FormId").serialize(), 
       success: function(response) { 
        alert(response.message); 
        alert(response['message']); 
       } 
      }); 
     }); 
    }); 

Вот мои действия контроллера

public function edit() { 
    $this->autoRender = false; // We don't render a view in this example 
    $this->request->onlyAllow('ajax'); // No direct access via browser URL 

    echo json_encode(array('message'=>'Welcome','type'=>'success')); 

    exit; 
} 

Оба оповещения на JavaScript возвращаются "неопределенные", как обращаться?

+0

Вам не нужны данныеТип: 'json' в вашем заявлении $ .ajax? –

+1

В целом, использование json_encode() и/или exit() напрямую не является лучшей практикой. Поскольку для этого должен быть ответственен слой представления (класс View). Подробнее см. Http://www.dereuromark.de/2014/01/09/ajax-and-cakephp/. – mark

ответ

-1

Из моего опыта эхо-контент не работает. Вместо этого вы должны вернуть данные json_encoded.

Это сделает edit() функция выглядеть следующим образом:

public function edit() 
{ 
    $this->autoRender = false; 
    $this->request->onlyAllow('ajax'); 

    return json_encode(array('message' => 'Welcome', 'type' => 'success')); 
} 

Чтобы убедиться, что он работает; просто предупредите весь объект ответа, чтобы узнать, что возвращается.

+0

Предупреждайте ответ, только получите [object Object]. Лучше использовать console.log (response); –

+0

Вот предупреждение от ответа: {"message": "Welcome", "type": "success"} –

+0

Если вы сейчас наберете: 'console.log (response.message) или alert (response.message) ', вы должны увидеть« Добро пожаловать » – JKaan

0

я получить эту работу, используя следующий код в контроллере

public function edit() 
{ 
    $this->RequestHandler->respondAs('json'); // Very important without this it will not work 
    $this->autoRender = false; 
    $data = array('message'=>'Welcome','type'=>'success'); 
    return json_encode($data); 
} 
1

Так что никто не получает это правильно.

Вы должны использовать JSON view

Узнайте, как включить с this section

class PostsController extends AppController { 
    public $components = array('RequestHandler'); 

    public function index() { 
     $this->request->onlyAllow('ajax'); 
     $this->set(array(
      'data' => array('message'=>'Welcome','type'=>'success'), 
      '_serialize' => 'data', 
     )); 
    } 
} 

торта будет автоматически установить правильные заголовки, сериализации в JSON, а не делает макет.

В качестве примечания стороны, ваш код alert(response.message); не работает beacuse response - это строка. ваш заголовок text/html не application/json. Попробуйте console.log(response), и вы увидите, что это просто строка.

+0

Не знаю, почему, я не могу получить ответ с помощью этого метода, я включил RequestHandler в AppController и Router :: parseExtensions ('json', ' XML '); на route.php при использовании этого метода ответ пуст. –

0

попробовать добавить

dataType: 'json', 

к вашему методу AJAX.

, если он не работает, попробуйте следующее: добавить

$this->response->type('text/plain'); 

к вашему индексного метода.

ie brower не знал текст в формате json. и какой бросер вы использовали для этого теста? использовать F12 открыть комплект разработчика, чтобы проверить, что ответ сервера, это объект

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