Pagina 1 din 1

Verificare aray cu mutari de sah preluat cu Ajax

Scris: Joi Feb 18, 2016
de andras
In array-ul parinte am un set de mutari care definesc o diagrama de sah (aici am 3 mutari cu definitia: albul muta si da mat in 3 mutari):

Cod: Selectaţi tot

array (\n 0 => \n array (\n 'mutari_id' => 3,\n 'diagrid' => 4,\n 'mutarefen' => '4k3/8/4K3/8/8/8/8/7R b - - 1 1',\n 'mutarepgn' => '1. Rh1',\n ),\n 1 => \n array (\n 'mutari_id' => 4,\n 'diagrid' => 4,\n 'mutarefen' => '3k4/8/4K3/8/8/8/8/7R w - - 2 2',\n 'mutarepgn' => '1. Rh1 Kd8',\n ),\n 2 => \n array (\n 'mutari_id' => 5,\n 'diagrid' => 4,\n 'mutarefen' => '3k4/8/4K3/8/8/8/8/R7 b - - 3 2',\n 'mutarepgn' => '1. Rh1 Kd8 2. Ra1',\n ),\n 3 => \n array (\n 'mutari_id' => 6,\n 'diagrid' => 4,\n 'mutarefen' => '4k3/8/4K3/8/8/8/8/R7 w - - 4 3',\n 'mutarepgn' => '1. Rh1 Kd8 2. Ra1 Ke8',\n ),\n 4 => \n array (\n 'mutari_id' => 7,\n 'diagrid' => 4,\n 'mutarefen' => 'R3k3/8/4K3/8/8/8/8/8 b - - 5 3',\n 'mutarepgn' => '1. Rh1 Kd8 2. Ra1 Ke8 3. Ra8#',\n ),\n)
Diagrama e data ca tema de casa, iar pentru rezolvare trebuie urmata aceeasi ordine de mutari (atit la alb cit si la negru), bineinteles ca elevului nu-i este afisata rezolvarea, el trebuie s-o gaseasca, iar verificarea se face dupa fiecare mutare. Deci prima mutare efectuata de elev trebuie sa coincida cu prima mutare din definitia diagramei, a doua mutare a elevului trebuie sa coincida cu a doua mutare din diagrama s.a.m.d. Fiecare mutare a elevului pe diagrama genereaza un sir FEN care este comparat cu cimpul mutarefen corespunzator din array. Ar fi minunat daca mi-ai da doar o idee cum sa fac. Multumesc.

Verificare aray cu mutari de sah preluat cu Ajax

Scris: Joi Feb 18, 2016
de MarPlo
Ai putea sa faci asa:
- Definesti o variabila care sa fie incrementata la fiecare mutare; apoi cu ea verifici daca mutarea respectiva (sirul fen) corespunde cu ce e in array-ul cu mutari, la indexul incrementat.

Cod: Selectaţi tot

//array with moves and other data
var arr_moves =[
  {mutari_id:1, diagrid:2, mutarefen:'R3k3/8/4K3/8/8/8/8/8 b - - 1 1', mutarepgn:'1. Ra8#'},
  {mutari_id:3, diagrid:4, mutarefen:'abc..', mutarepgn:'xyz..'}
];

//function called to each move; receives the fen of current move
var move_nr =0;  //incremented to each move
function checkMove(fen){
  if(arr_moves[move_nr].mutarefen == fen){
    //correct move
    move_nr++;
  }
  else alert('Incorrect move');
}

Verificare aray cu mutari de sah preluat cu Ajax

Scris: Vin Feb 19, 2016
de andras
Functioneaza doar atunci cind definesc eu array in functia JS. Ex:

Cod: Selectaţi tot

<script>
var idmutari = [{"mutari_id":1,"diagrid":2,"mutarefen":"R3k3/8/4K3/8/8/8/8/8 b - - 1 1","mutarepgn":"1. Ra8#"}];
alert(idmutari[0].mutarefen); // afiseaza R3k3/8/4K3/8/8/8/8/8 b - - 1 1
</script>
Dar daca array-ul vine din ajax nu mai functioneaza. In fisierul apelat cu ajax am pus:

Cod: Selectaţi tot

<?php
$resultat = $objReM->sqlExecute($sql);
$json = json_encode($resultat);
echo $json;
?>
Iar in JS am pus:

Cod: Selectaţi tot

<script>
    success : function(msg) {
        var mutari = JSON.stringify( msg );    
        $('#idmutari').val(mutari);   // idmutari este tip hidden
    }
//........................... iar in functia JS dupa ce extrag valoarea idmutari
alert(idmutari[0].mutarefen); // afiseaza undefined
</script>
De dimineata tot incerc dar nu reusesc. Unde gresesc?

Verificare aray cu mutari de sah preluat cu Ajax

Scris: Vin Feb 19, 2016
de MarPlo
Variabila care sa contina obiectul cu mutarile (var mutari) se defineste in afara functiei ajax (ca sa fie globala, sa poata fi folosita si in alte functii).
JSON.stringify transforma un obiect in sir-json in javascript, deci daca-l vrei obiect /array, nu aplica "JSON.stringify".
Cam asa:

Cod: Selectaţi tot

var mutari ='';
//functia ajax
  success : function(msg) {
        mutari = msg;   //msg e deja obiect /array
        $('#idmutari').val(JSON.stringify( msg ));
  }

Verificare aray cu mutari de sah preluat cu Ajax

Scris: Vin Feb 19, 2016
de andras
Am incercat si asa si tot nu-mi merge:

Cod: Selectaţi tot

<script>
    success : function(msg) {
       	alert(msg);    // [{"mutari_id":1,"diagrid":2,"mutarefen":"R3k3\/8\/4K3\/8\/8\/8\/8\/8 b - - 1 1","mutarepgn":"1.                      
                                   Ra8#"}]
        alert(msg[0].mutarefen);  // undefined      - (ar trebui sa afiseze R3k3\/8\/4K3\/8\/8\/8\/8\/8 b - - 1 1)
    }
</script>
Nu-mi explic de ce. Poate la json_encode ar trebui sa pun ceva optiuni, dar am incercat si cu json_encode($resultat, JSON_FORCE_OBJECT) si cu json_encode($resultat, JSON_PRETTY_PRINT) si tot nu functioneaza.

Verificare aray cu mutari de sah preluat cu Ajax

Scris: Vin Feb 19, 2016
de MarPlo
Daca msg e un sir cu date in format json, se foloseste JSON.parse(json_string) ca sa-l transformi in obiect in javascript.

Cod: Selectaţi tot

mutari = JSON.parse(msg);  //makes it object
$('#idmutari').val(msg);  //add the json string in form field
alert(mutari[0].mutarefen);
- Daca nu stii exact ce tip /format de date contine "msg", se verifica in consola, cu: console.log(msg); .

Verificare aray cu mutari de sah preluat cu Ajax

Scris: Vin Feb 19, 2016
de andras
Asta era problema, multumesc! Salvez variabila ca format JSON in input type hidden iar inainte de intrebuintare aplic functia JSON.parse() si functioneaza.