1

配列オブジェクトを返し、それをユーザーに表示するときに問題が発生しました。デモコードをご覧ください。基本的なスニペットですが、同じ考えがあります。ここに非常に長いコードを投稿することはできません。

Class foobar{
   public function foo()
   {
     return array( 'bar' => 'value' );
   }
}

このphpコードは別のクラスで使用されました

Class foobar_fetcher{
   public function getFoo()
   {
     $fb = new foobar();
     $result = $fb->foo();
     return $result;
   }
}

foob​​ar_fetcherは、jsonヘッダーを使用してメインの実行ファイル(ajaxdispatcher.php)によって再び呼び出されます。

if( isset( $_POST['fetch'] ) ){
   $httpresponse = new stdClass();
   $fb_fetch = new foobar_fetcher();
   $httpresponse->data = $fb_fetch->getFoo();
}

echo json_encode( $httpresponse );

最後に、このajaxdispatcherはjqueryajaxによって呼び出されました。

$.ajax({
  url: 'ajaxdispatcher.php',
  type: 'post',
  data: {fetch:'fetch'},
  success: function( data ){
      if( data ) console.log( data );
  }
});

さて、データを印刷しようとすると、サーバーからの応答がありません。しかし、foobarクラスの下のfoo()の戻り値を整数または文字列に変更すると、物事はうまくいくでしょう。

4

2 に答える 2

2

GETリクエストを受け入れるようにajaxdispatcherを変更し、ブラウザからそこに移動して、何が返されるかを確認する必要があります。

if( isset( $_GET['fetch'] ) ){
   $httpresponse = new stdClass();
   $fb_fetch = new foobar_fetcher();
   $httpresponse->data = $fb_fetch->getFoo();
}

echo json_encode( $httpresponse );

/ajaxdispatcher.php?fetch=fetchに移動します

于 2012-08-23T05:23:43.220 に答える
0

あなたの成功の可能性を高めるかもしれないいくつかのこと

  1. 適切な HTTP ヘッダーを設定exitし、JSON コードを送信した直後に

    header('Content-type: application/json');
    echo json_encode($httpresponse);
    exit;
    

    また、これより前に出力バッファにデータを送信していないことを確認してください。

  2. 期待するデータ型をjQueryに伝える

    $.ajax({
        dataType: 'json',
        // and the rest
    
  3. errorコールバックを追加する

    $.ajax({
        // snip
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(jqXHR, textStatus, errorThrown);
        }
    });
    
于 2012-08-23T05:51:06.277 に答える