40

私はこれでレンガの壁に頭をぶつけてきました.stackoverflowでたくさんの解決策を試しましたが、うまくいくものを見つけることができません!

基本的に、AJAX を POST すると、PHP は JSON を返しますが、AJAX は値の代わりに Undefined を示します。

JS :

  /* attach a submit handler to the form */
  $("#group").submit(function(event) {

  /* stop form from submitting normally */
  event.preventDefault();

  /*clear result div*/
  $("#result").html('');

  /* get some values from elements on the page: */
  var val = $(this).serialize();

  /* Send the data using post and put the results in a div */
  $.ajax({
      url: "inc/group.ajax.php",
      type: "post",
      data: val,
  datatype: 'json',
      success: function(data){
            $('#result').html(data.status +':' + data.message);   
            $("#result").addClass('msg_notice');
            $("#result").fadeIn(1500);           
      },
      error:function(){
          $("#result").html('There was an error updating the settings');
          $("#result").addClass('msg_error');
          $("#result").fadeIn(1500);
      }   
    }); 
});

PHP :

  $db = new DbConnector();
  $db->connect();
  $sql='SELECT grp.group_id, group_name, group_enabled, COUNT('.USER_TBL.'.id) AS users, grp.created, grp.updated '
        .'FROM '.GROUP_TBL.' grp '
        .'LEFT JOIN members USING(group_id) '
        .'WHERE grp.group_id ='.$group_id.' GROUP BY grp.group_id';

    $result = $db->query($sql);     
    $row = mysql_fetch_array($result);
    $users = $row['users'];
    if(!$users == '0'){
        $return["json"] = json_encode($return);
        echo json_encode(array('status' => 'error','message'=> 'There are users in this group'));
    }else{

        $sql2= 'DELETE FROM '.GROUP_TBL.' WHERE group_id='.$group_id.'';
        $result = $db->query($sql2);

        if(!$result){
            echo json_encode(array('status' => 'error','message'=> 'The group has not been removed'));
        }else{
            echo json_encode(array('status' => 'success','message'=> 'The group has been removed'));
        }
    }

firebug からの JSON 結果:

{"status":"success","message":"success message"}

AJAX JSON結果を未定義として表示しますが、その理由はわかりません。dataType='json'と を付けて表示してみdatatype='json'ました。data.status私もそれをandに変更しようとしましたが、data['status']それでも喜びはありません。

どんな助けでも本当に感謝しています。

4

5 に答える 5

48

dataTypeの代わりに作りdatatypeます。

また、ajax リクエストは json を想定しており、json 以外は何も受け入れないため、以下のコードを php に追加します。

header('Content-Type: application/json');

JSON および JSONP の正しいコンテンツ タイプ

firebug に表示される応答はテキスト データです。Content-Type応答が json の場合、確認する応答ヘッダーのチェック。application/jsonfordataType:'json'text/htmlforである必要がありdataType:'html'ます。

于 2013-10-03T09:17:25.493 に答える
5

私はあなたが使用することをお勧めします:

var returnedData = JSON.parse(data);

JSON 文字列 (単なるテキストの場合) を JavaScript オブジェクトに変換します。

于 2013-10-03T09:19:52.270 に答える
3

parseJSON jquery メソッドを使用して、文字列をオブジェクトに変換します

var objData = jQuery.parseJSON(data);

コードを書けるようになりました

$('#result').html(objData .status +':' + objData .message);
于 2013-10-03T09:25:31.210 に答える
2

データ型が間違っています。dataType のデータ型を変更してください。

于 2014-02-13T21:07:56.747 に答える
2

エコーする直前にこれを使用して、サーバーからコンテンツ タイプ ヘッダーを送信してみてください

header('Content-Type: application/json');
于 2013-10-03T09:16:26.177 に答える