2016-03-27 11 views
0

Benötigen Sie Hilfe bitte.Ajax Json decode erhält korrekte Werte

Ich sende Daten über Jquery Ajax, die vor dem Senden codiert ist.

[["Snooks",true],["blastman125",true],["Firebad",true]] 

In PHP ich tun:

$player_j_info = json_decode(stripslashes($_POST['player_info'])); 

foreach($player_j_info as $p_info){ 
    echo "Name: $p_info[0]<br/>Val: $p_info[1]<br/><br/>"; 
} 

Wenn ich das tue, es nur der letzte Wert des Arrays zurückgibt. Kann mir bitte jemand erklären?

Danke!

Edit:

$(document).on('click', '.update_league_team_submit', function(event){ 
    var form_player_count = 0; 
    var form_player_selected_count = 0; 

    var player_data_array = []; 
    var player_data_json_array; 

    $('#form_players #team_players_group input').each(function() { 

     var this_member_name = $(this).attr("name"); 
     var this_member_value = $(this).prop('checked'); 

     player_data_array[form_player_count] = [this_member_name, this_member_value]; 

     player_data_json_array = JSON.stringify(player_data_array); 

     form_player_count++; 
     if($(this).prop('checked') === true){ 
      form_player_selected_count++; 
     } 
    }); 

var formData = { 
     'league_id' : $('input[name=league_id]').val(), 
     'team_id' : $('input[name=league_team_id]').val(), 
     'player_info' : player_data_json_array, 
     'form_player_count' : form_player_count, 
     'form_player_selected_count' : form_player_selected_count 
    }; 

$.ajax({ 
     type : 'POST', // define the type of HTTP verb we want to use (POST for our form) 
     url : '/league/pop_join_league_member_submit.php', // the url where we want to POST 
     data : formData, // our data object 
     dataType : 'json', // what type of data do we expect back from the server 
     encode : true, 
     beforeSend: function(){ 
      $("#form_players .form_info").remove(); 
      $("#form_players .form_controls p").hide(); 
      } 
     }) 
     .done(function(data) { 
      if (! data.success) { 
       $("#form_players .form_info").remove(); 
       $("#form_players .form_controls p").hide(); 
       if (data.errors.bam) { 
        $("#form_players").append(data.errors.bam); 
       } 
       if (data.errors.invalid_member_size){ 
        $("#form_players .form_controls .spinner").remove(); 
        $("#form_players .form_controls p").show(); 
        $('<div class="form_info" style="padding-top:8px;"><span class="error">You selected too many members, try again.</span></div>').insertBefore('#form_players .form_controls').hide().fadeIn(); 
       } 
       $("#form_players .form_info").remove(); 
       $("#form_players .form_controls p").show(); 
      } else { 
       $("#form_players .form_controls .spinner").remove(); 
       $("#form_players .form_controls p").show(); 
       $('<div class="form_info" style="padding-top:8px;"><span class="success success_page">Teams updated.</span></div>').insertBefore('#form_players .form_controls').hide().fadeIn(); 
      } 
     }); 
    event.preventDefault(); 
}); 

Antwort

1

Sie haben einige Fehler in Ihrem JSON. Es sollte sein:

[["Snooks",true],["blastman125",true],["Firebad",true]] 

Es ist irgendwie seltsam, da das, was Sie geschrieben haben überhaupt nicht analysieren sollte. Nach der Durchführung dieser Korrektur ist die Ausgabe, die ich bekomme:

Name: Snooks 
Val: 1 

Name: blastman125 
Val: 1 

Name: Firebad 
Val: 1 

Welches ist, was Sie erwarten, richtig?

+0

@rcsnooks Nein, habe ich nicht. Sie haben gerade Ihren Beitrag bearbeitet. – Chris

+0

@rcsnooks Nun, der Code, den Sie gepostet haben, funktioniert genauso wie erwartet. Die einzige Erklärung, die ich mir vorstellen kann, ist, dass '$ _POST ['player_info']' nicht das ist, was du denkst. – Chris

+0

@rcsnooks Auch in Chrome und Firefox können Sie den Inhalt von Benachrichtigungsfeldern kopieren und einfügen. – Chris