2012-03-06 15 views
0

コーディングの時間が過ぎると、最終的にAJAX、JSON、CIの周りをある程度まで包んでいるように感じます。CI_modelがPOSTされたJSONデータを正しくキャッチしない

しかし、私は1つの最終的な障害に遭ったと感じています。以下は私のコードです:ここで私は単に私のフォームを構築してい

HTML

<div id="structures"> 
    <h1>Build</h1> 
    <form name="buildForm" id="buildForm" method="POST" action="<?php echo base_url(); ?>/ajax/index/"> 
     <select name="buildID" class="buildClass"> 
     <option value="0" selected="selected" data-skip="1">Build a Structure</option> 
<?php foreach ($structures as $structure_info): ?> 
    <option name='<?php echo $structure_info['str_name'] ?>' value='<?php echo $structure_info['str_id'] ?>' data-icon='<?php echo $structure_info['str_imageloc'] ?>' data-html-text='<?php echo $structure_info['str_name'] ?><i> 
     <?php echo $structure_info['timebuildmins'] ?> minutes<br><?php echo $structure_info['buy_gold'] ?> gold</i>'><?php echo $structure_info['str_name'] ?></option> 
<?php endforeach ?> 
     </select> 
     <div id="buildSubmit"> 
      <input id ="btnSubmit" class="button" type="submit" value="Submit"/> 
     </div> 
    </form> 
</div> 

AJAX/JS

$(function(){ 
    $("#buildForm").click(function(e, buildID){ 
     e.preventDefault(); 
     var frm = $(document.buildForm); 
     var dat = JSON.stringify(frm.serializeArray()); 
     alert("I am about to POST this:\n\n" + dat); 
     $.post(
      frm.attr("action"), 
      dat,   
     function(response) 
     { 
      alert(response); 
     } 
    ); 
}); 
}); 

モデル関数

私は新しいコントローラクラスの拡張 "のAjax" と機能 "インデックス" は、これは単に私のモデル「insert_buildを呼び出して作成しました。 " .jsファイルをページから取り出し、ヘッダーに保持するのが私の回避策でした。

とにかく。送信ボタンを押すと、JSON出力が正常に通知されます。それはコントローラ - >モデルに渡された後、それはどこにもキャッチしていないようです。私はそれが間違っていると仮定しますが、何が分かりません。

ありがとうございます。

+0

わからないのに役立ちます( 'dat') " – Tjkoopa

+0

将来あなたを助けるかもしれない小さなヒント。 alertの代わりにconsole.logを試してみてください。物事をよりエレガントに保ちます;)。 –

答えて

1

ここでいくつか試してみてください。 var frm = $(document.buildForm);

は、それはあなたの$.postが実際に有効なURLを取得していることを確認するために行動値

alert(frm.attr("action")); 

だ警告してみてください。

次に、insert_build機能を変更して、受信した内容を印刷してみます。 datという名前の投稿がないので、$this->input->post(dat);に電話をしてはいけません。

public function insert_build() 
{ 
    print_r($_POST); 
} 

EDIT

あなたは、URLのparamとしてJSON文字列を渡す必要があります。

$のアヤックスを使用しない理由
public function insert_build() 
{  
    $str_id = $this->input->post('data'); 
    print_r(json_decode($str_id)); 
} 
+0

ありがとうございます。このエラーを修正した後でも、print_r($ _ POST); –

+0

で空の配列が返され、空の配列が返されますが、 "stringify"で私はそれを取り除いたときに、私が探していた価値が返ってきました。なぜどんな説明が役に立つのですか?ありがとう –

+0

@RickyMasonは私の編集をチェックします。 –

1

にあなたのPHPを変更

$.post(frm.attr("action"), {data:dat}, function(response) 
    { 
     alert(response); 
    }); 

そして、してみてください?それは、あなたがSOにそれを貼り付け、どれだけが、「の$ this - >入力 - >ポスト(DAT)は、」あるべき「の$ this - >入力 - >ポストだ場合

$('#buildForm').live('click', function(event){ 
var data = $('form[name="buildForm"]').serialize(); 
    $.ajax({ 
     url:'<?php echo base_url(); ?>ajax', 
     data:data, 
     type:'post', 
     success:function(result){ 
      alert(result); 
     }, 
     error:function(result){ 
      alert(result); 
     } 
    }); 
}); 

希望これは

関連する問題