CodeIgniter: я не могу получить значение из текстовой области из html -> ajax -> php - PullRequest
1 голос
/ 20 марта 2019

Кажется, я не могу получить значение моего textarea в php от ajax.Когда я пытаюсь получить значение из html в javascript следующим образом, var content = $('textarea[name=post_content]').val(); console.log(content);, он выводит значение моей текстовой области, но когда я передаю его в свой контроллер с помощью ajax, он ничего не выводит.

Вот мой HTML-код:

<?php $attributes = array('id' => 'create_post_form'); ?>
        <?php echo form_open_multipart('', $attributes); ?>
            <label>Title:</label>
            <input type="text" name="title" placeholder="Enter Title" class="form-control" required>

            <label>Category:</label>
            <select name="category" class="form-control" required>
                <option value="">--------</option>
                <?php foreach ($categories as $category): ?>
                    <option value="<?php echo $category['id']; ?>"><?php echo $category['name']; ?></option>
                <?php endforeach ?>
            </select>

            <label>Upload Image:</label>
            <input type="file" name="userfile" placeholder="Upload Image" class="form-control">

            <label>Post Content:</label>
            <textarea class="form-control" rows="15" name="post_content" placeholder="Enter Content of Post" required></textarea>

            <button type="submit" class="btn btn-secondary submit-button form-control">Save</button>
        <?php echo form_close(); ?>

Это мой AJAX:

$('#create_post_form').submit(function(e) {
e.preventDefault();

$.ajax({
    data : new FormData(this),
    method : 'post',
    dataType : 'json',
    url : base_url + 'posts/create',
    async : false,
    cache : false,
    contentType : false,
    processData : false,
    success : function(data) {
        if(data['status'] == 'success')
        {
            $('#main_container').load(data['redirect_url']);
        }
        else
        {
            $('.error_container').html(data['message']);
            $('.error_container').addClass('error-border');
        }
    }
});

});

и это мой контроллер:

public function create()
    {
        $result['status'] = 'error';
        $result['message'] = $this->input->post('post_content');

        $this->output->set_content_type('application/json');
        $this->output->set_output(json_encode($result));
        $string = $this->output->get_output();
        echo $string;
        exit();
    }

В моем контроллере я пытаюсь увидеть значение моей текстовой области, используя состояние ошибки, чтобы оно выводило значение как ошибку, чтобы я мог проверить, получаю ли я значение текстовой области,Но его возвращение не имеет значения.Я также использую ckeditor.Проблема началась, когда я использовал текстовый редактор.

<script type="text/javascript">
CKEDITOR.replace( 'post_content' );

Спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 20 марта 2019

Сначала удалите эти два:

contentType : false,
processData : false,

Параметры передачи, как показано ниже:

var dataObj = {
      post_content : $(":input[name='post_content']").val(),
      cat : $("select[name='category']").val()
};

и добавьте его как:

data: jQuery.param(dataObj), 
contentType: "application/x-www-form-urlencoded; charset=utf-8",

Ваши параметры будут такими, как, например,

post_content=post_content&cat=catValue

Надеюсь, это поможет

0 голосов
/ 21 марта 2019

Я нашел решение своей проблемы. Я использовал CKEditor GetData , чтобы получить значение текстовой области, и добавил его к formData как post_content2, например,

var content = CKEDITOR.instances['post_content'].getData();
var formData = new FormData(this);
formData.append('post_content2', content);

Я нашел свое решение здесь: how-can-i-get-content-of-ckeditor-using-jquery

Спасибо за все ответы:)

0 голосов
/ 20 марта 2019

попробуйте с serialize()

$('#create_post_form').submit(function(e) {
e.preventDefault();

$.ajax({
    data :  $('#create_post_form').serialize(),
    method : 'post',
    dataType : 'json',
    url : base_url + 'posts/create',
    async : false,
    cache : false,
    contentType : false,
    processData : false,
    success : function(data) {
        if(data['status'] == 'success')
        {
            $('#main_container').load(data['redirect_url']);
        }
        else
        {
            $('.error_container').html(data['message']);
            $('.error_container').addClass('error-border');
        }
    }
});
});

, если это не сработает, попробуйте 1 к 1 опубликовать данные

$('#create_post_form').submit(function(e) {
e.preventDefault();

$.ajax({
    data : {
      post_content : $(":input[name='post_content']").val(),
      cat : $("select[name='category']").val(),
      /* and etc post the data what u need*/

},
    method : 'post',
    dataType : 'json',
    url : base_url + 'posts/create',
    async : false,
    cache : false,
    contentType : false,
    processData : false,
    success : function(data) {
        if(data['status'] == 'success')
        {
            $('#main_container').load(data['redirect_url']);
        }
        else
        {
            $('.error_container').html(data['message']);
            $('.error_container').addClass('error-border');
        }
    }
});

, а затем в вашем контроллере попытаться сбросить все данные POSTкак это

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