Передать массив в действие, используя ajax YII
Привет, я действительно новичок в YII, пожалуйста, помогите мне решить простую проблему. Я пытаюсь передать некоторые значения из JS в действие, а затем поместить их в базу данных. Большая часть этого кода я получил из учебника
public function actionInsert(){
$post = file_get_contents("php://input");
$data = CJSON::decode($post, true);
$read = new Read();
$read->attributes = $data;
$response = array();
$read->save();
}
Тогда я отправляю:
$.ajax({
type: "POST",
url: "/read/insert/",
data: "name=imja&short_desc=korotkoe&author=avtor&image=photo",
error: function (){
alert('Error');
},
success: function(data){
alert('success');
}
});
Но я получаю предупреждение "ошибка" и ничего не идет в БД.
1 ответ
Значения из.ajax не передаются в виде массива JSON, значения должны быть просто в $_POST
массив. Также мне нравится возвращать что-то вроде "завершено". Попробуйте изменить свой код на это:
public function actionInsert(){
$read = new Read();
$read->attributes = $_POST;
$response = array();
$read->save();
echo 'complete';
die();
}
Или вы можете отправить его как массив JSON со стороны javascript:
var data = {
name: 'imja',
short_desc: 'korotkoe',
author: 'avtor',
image: 'photo'
};
$.ajax({
type: "POST",
url: "/read/insert/",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
error: function (){
alert('Error');
},
success: function(data){
alert('success');
}
});
Однако даже если вы сделаете это, Apache увидит тип заголовка и все еще заполнит $_POST
массив правильно. Так что это действительно не нужно.
Также, если вы еще не установили Firebug на Chrome или Firefox, вы можете увидеть, что фактические вызовы ajax в консоли. Посмотрите, какую ошибку вы получаете от вашей функции действия в вашем контроллере.