передать массив в действие, используя 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');

            }
    });

Но я получаю предупреждение об ошибке, и ничего не поступает в БД.


person Mark Okhman    schedule 19.11.2013    source источник
comment
в URL сделайте Yii::app()->createUrl('read/insert')   -  person Developerium    schedule 20.11.2013


Ответы (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 в консоли. Посмотрите, какую ошибку вы получаете от своей функции действия в своем контроллере.

person Pitchinnate    schedule 20.11.2013
comment
Пинчинэйт, это работает!!! Спасибо! Но проблема в том, как мне получить значения из сообщения, которое я получил в контроллере? когда я пишу $name = $_POST['name']; я получаю 500 IntServerErro - person Mark Okhman; 21.11.2013
comment
Решил проблему! Спасибо! - person Mark Okhman; 21.11.2013