0

私は Php/Jquery プログラミングが初めてで、Jquery AJAX 呼び出しから JSON フィールドにアクセスする方法を考えようとして一日中過ごしました。

私は codeingniter を使用しています。私のコントローラーでは、関連するコードは次のとおりです。

if( $this->input->is_ajax_request()) 
{
    $view_data['test'] = 'ajax';
    echo json_encode( $view_data ); 
}
else
{
    $view_data['test'] = 'not ajax';                              
    $data = array(
            'javascripts' => array(
            'js/jquery.dataTables.js',
            'js/zona/dataTable_zone.js',
            'js/zona/gestisci_zone.js',
            'js/jquery-ui-1.8.20.custom.min.js' ,
            'js/jquery.ui.error-panel.js',  
            'js/jquery.validate.min.js' ,
            'js/localization/messages_it.js'
        ),
        'style_sheets' => array(
            'css/south-street/jquery-ui-1.8.20.custom.css' => 'screen',                 
            'css/jquery.dataTables.css' => 'screen'
        ),
        'content' => $this->load->view( 'zona/gestisci_zone', $view_data, TRUE )
    );

    $this->load->view( $this->template, $data);
} 

` ビューでは、関連するコードは

<div id="id_test">  <p><?php echo $test ?> </p></div>

そしてJavaScriptファイルでは、関連するAJAXコードは

`$.ajax( { type:"POST", url:this_url, dataType: 'json', data: post_data,
success: function(data){

                                             console.log(data);
                                             console.log($("id_test").empty());
                                        $("#id_test").empty().append(data.test);
                                        },
                                        error: function(data){

                                        alert("error");

);`

このようにして、AJAX出力はArray{"test":"ajax"}

私の予想される動作は $("#id_test").empty().append(data.test);、AJAX 出力を使用すると ajax という単語だけになるということですが、空白の div が返されるだけです。多くのモードでアクセスしようとしましたが、これを達成する方法がわかりませんでした。たぶん、経験不足のために何かが欠けているか、間違ったアプローチを使用しています。アドバイスをお願いします。:)

少しデバッグした後、プレーンテキスト/偽のJSONの問題であるという結論に達しました。json配列ではなく、配列のテキスト表現のみを返しています。さて、コントローラーから正しいjson配列を送信するにはどうすればよいですか? (私はすでに効果なしでアプリケーション/jsonにMIMEタイプを強制しました)

4

5 に答える 5

0

それdataTypeはそうではありませんdatatype。それが問題だと思います。返されたデータをjsonとして、代わりに文字列として解析していないようです。

于 2012-05-21T17:32:33.793 に答える
0

それでも成功しない場合は、json と jsonp を切り替える必要があるかもしれません。jQueryには「json」と「jsonp」の2つのオプションがあります

于 2012-05-21T17:38:23.587 に答える
0

ajax 呼び出しにエラー ハンドラーを追加して、正常に実行されたかどうかを判断できるようにしてください。そして、 data.dを使用する必要があると思います

于 2012-05-21T17:42:39.423 に答える
0

推測ですが...構文エラーでしょうか?

if( $this->input->is_ajax_request()) 
{
    view_data['test'] = 'ajax';
    // dont you mean $view_data?

    echo json_encode( $view_data ); 
}
于 2012-05-21T20:55:50.603 に答える
0

私があなたのことを正しく理解している場合、あなたの<div id="id_test"> <p><?php echo $test ?> </p></div>を の「ajax」という単語に置き換えるには、次のこと$.ajax()を試してください。

$.ajax({
  type:"POST",
  url:this_url, 
  dataType: 'json',
  data: post_data, 
  success: function(data){
    $("#id_test").empty().append(data.test);
  }
});

datareturnsについて言及しているのでArray{"test":"ajax"}、返された JavaScript オブジェクトにこの方法でアクセスできます。data.test

于 2012-05-22T08:14:19.520 に答える