Jquery, чтение переменных JSON, полученных из PHP - PullRequest
2 голосов
/ 11 августа 2010

Извините, если это просто, но я занимался выяснением этого весь день и нашел, где я могу сделать все, что мне нужно, с помощью Jquery и cakephp (не уверен, что это имеет значение для cakephp или его так же, как для любого PHP), Я хочу вернуть переменную из функции cakephp в jquery, я читал о том, как это сделать, как здесь:

cakephp:

$test[ 'mytest'] = $test;
 echo json_encode($test);

и jquery:

$.ajax({
  type: 'POST',
  url: 'http://localhost/site1/utilities/ajax_component_call_handler',
  data: {
        component_function: component_function,
        param_array: param_array
        },
        dataType: "json",
  success: function(data) {
   // how do i get back the JSON variables? 
  }
});

Я просто не могу понять, как вернуть одну или несколько переменных в пригодную для использования форму в jquery, я просто хочу переменную, чтобы я мог делать с ней все остальное, я смотрел на то, чтоЯ могу найти с помощью поиска, но это не дает мне полной ясности .. спасибо за любой совет.

Ответы [ 5 ]

2 голосов
/ 11 августа 2010

Переменные JSON находятся в переменной data.В вашем случае это будет выглядеть так:

var data = {
    myTest: "Whatever you wrote here"
};

... так что вы можете прочитать его с data.myTest.

(Не уверен, что это актуально, но вы можете удалитьhttp://localhost/ часть от URL; AJAX все равно не разрешает междоменные запросы.)

1 голос
/ 11 августа 2010

Ваши переменные находятся в данных.

$.ajax({
  type: 'POST',
  url: 'http://localhost/site1/utilities/ajax_component_call_handler',
  data: {
        component_function: component_function,
        param_array: param_array
        },
        dataType: "json",
  success: function(data) {
   // how do i get back the JSON variables? 
      var values = eval( data ); //if you 100 % trust to your sources.
  }
});
0 голосов
/ 12 августа 2010

В случае возврата переменной JSON для просмотра файлов, вы можете использовать javascript helper:

в вашем контроллере утилит:

function ajax_component_call_handler() {
  $this->layout = 'ajax';
  if( $this->RequestHandler->isAjax()) {
       $foobar = array('Foo' => array('Bar'));
       $this->set('data', $foobar);
  } 
}

и по вашему мнению / utilities / ajax_component_call_handler.ctp вы можете использовать:

if( isset($data) ) {
   $javascript->object($data); //converts PHP var to JSON
}

Итак, когда вы достигнете стадии в своей функции:

 success: function(data) {
   console.log(data); //it will be a JSON object.    
 }

В этом случае вы будете обрабатывать переменные типа отдельно от контроллеров и просматривать логику (что если вам понадобится что-то еще, кроме JSON) ...

0 голосов
/ 11 августа 2010

Обратите внимание, что когда вы указываете dataType "json" или используете $. getJSON (вместо $. ajax ), jQuery автоматически применяет $. parseJSON .

Таким образом, при обратном вызове «success» вам не нужно снова анализировать ответ, используя parseJSON:

success: function(data) {
 alert(data.mytest);
}
0 голосов
/ 11 августа 2010

В основном переменная данных содержит строку json. Чтобы разобрать его и снова преобразовать в JSON, вам нужно сделать следующее:

$.ajax({
  type: 'POST',
  url: 'http://localhost/site1/utilities/ajax_component_call_handler',
  data: {
        component_function: component_function,
        param_array: param_array
        },
        dataType: "json",
  success: function(data) {
   json = $.parseJSON(data);
   alert(json.mytest);
  }

Я не тестировал его, но он должен работать таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...