0

基本的に、AJAXを介してコメントを投稿し、新しいコメントをHTMLにロードしようとしています。AJAX成功関数だと思うものに問題があります。データはデータベースに正常に追加されますが、「申し訳ありませんが、予期しないエラーです。後でもう一度やり直してください。」というエラーが表示されます。成功関数自体の内部に設定されています。

JS:

function newComment(event) {        

    event.preventDefault();

    //Get the data from all the fields
    var comment = $('textarea');
    var product_id = $('input[name=product_id]');

    var form_data = {
        comment : comment.val(),
        product_id : product_id.val()
    };

    //Simple validation to make sure user entered something
    if (comment.val()=='') {
        alert('Comment cannot be blank!');
        return false;
    }


    //show the loading sign
    $('#loading').show();

    //start the ajax
    $.ajax({
        //this is the php file that processes the data and send mail
        url: "main/ajax_comment", 

        //GET method is used
        type: "POST",

        //pass the data         
        data: form_data,

        //success
        success: function (c) {              
            //check the status
            if (c.status==1) {           
                $('Posted By: ' + c.username + '<br> Body: ' + c.body + '<br> Posted On: ' + c.date + '<hr>').appendTo('#new_comment');

                $('#loading').hide();

                $('#new_comment').slideDown();

            //0/false (send mail failed)
            } else alert('Sorry, unexpected error. Please try again later.');               
        }
    });
}

PHP:

public function ajax_comment()
{
    sleep(4);
        $this->main_model->add_comment($this->session->userdata('user_id'), $this->input->post('product_id'), $this->input->post('comment'));
        $i = $this->auth_model->get_data_id($this->session->userdata('user_id'), 'user');
        $return = array(
            'status' => '1',
            'username' => $i->username,
            'body' => $this->input->post('comment'),
            'date' => time()
            );
        echo json_encode($return);
}

HTML:

<form action="<?php echo base_url()."main/comment"; ?>" method="post">
<input type="hidden" name="product_id" value="<?php echo $p->u_product_id; ?>">
<textarea name="new_comment"></textarea><br>
<input type="submit" name="submit_comment" id="submit_comment" value="Post">
<div id="loading" style="display: none;">
    <img src="<?php echo base_url()."assets/img/load.gif"; ?>">
</div>

私は何か間違ったことをしていますか?

4

2 に答える 2

0

jsonをsuccess関数に送り返しているようですので、dataTypeを追加する必要があります。

$.ajax({
    //this is the php file that processes the data and send mail
    url: "main/ajax_comment", 

    //GET method is used
    type: "POST",

    //pass the data         
    data: form_data,

    // data type
    dataType: 'json',       /* added */

    //success
    ...

それでも問題が解決しない場合は、c変数に何が含まれているかを確認してください。おそらく、いくつかのphp警告もエコーされ、返されたjsonが無効になります。

于 2012-09-28T01:00:28.240 に答える
0

考えられる問題または解決策:

(1)入力タイプを使用する代わりに、タイプsubmitを使用してフォーム値buttonを削除します。これは、リクエストで指定している原因でもあります。actionmethod$.ajax

(2)次のようにリクエストにdataType引数を含めることを忘れないでください:$.ajax

  $.ajax({
        url: "main/ajax_comment", 
        type: "POST",       
        data: form_data,
        dateType: "json",
        success: function (c) { 
  ...

(3)成功関数でPHP実行して返されたデータを確認し、次のようなステータスとその他の値を確認します。console.log

success: function (c) { 
   console.log(c);
   console.log(c.status);
...

(4)javascriptjson objectsが適切に構成されていることを確認します。

于 2012-09-28T01:12:01.793 に答える