Извините, если это базовое, но я занимаюсь выяснением этого в течение всего дня и добрался до того места, где я могу делать все, что мне нужно, с JQuery и cakephp (не уверен, имеет ли значение cakephp в этом или, если он такой же, как любой PHP), я хотите вернуть переменную из функции cakephp в jquery, я прочитал о том, как это сделать, например здесь:
торт:
$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, я просто хочу переменную, чтобы я мог делать что-то еще с ней, я искал то, что я могу найти, но не что делает его полностью ясным для меня .. спасибо за любой совет.
Ваши переменные находятся в данных.
$.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. } });
Переменные JSON находятся в переменной data
. В вашем случае это будет выглядеть так:
var data = { myTest: "Whatever you wrote here" };
… так что вы можете прочитать его из data.myTest
.
(Не уверен, что это актуально, но вы можете удалить http://localhost/
part из URL-адреса, AJAX не разрешает междоменные запросы в любом случае.)
В основном переменная данных содержит строку 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); }
Я не тестировал его, но он должен работать таким образом.
Обратите внимание, что когда вы указываете dataType «json» или используете $. getJSON (вместо $. ajax ) jQuery будет применять $. parseJSON автоматически.
Таким образом, в обратном вызове «success» вам не нужно снова анализировать ответ с помощью parseJSON:
success: function(data) { alert(data.mytest); }
В случае возвращения переменной JSON для просмотра файлов вы можете использовать javascript-помощник:
в вашем контроллере утилит:
function ajax_component_call_handler() { $this->layout = 'ajax'; if( $this->RequestHandler->isAjax()) { $foobar = array('Foo' => array('Bar')); $this->set('data', $foobar); } }
и в вашем представлении / утилитах / 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) …