I'm french so excuse me for my english :) I checked a lot of topics. Some seems to be the same problem but it still doesn't work. I'm a beginner in javascript too.
So, here is my code :
`
$(document).ready(function () {
var container = document.getElementById('Grille_competences');
var headerRenderer = function (instance, td, row, col, prop, value,
cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
td.style.fontWeight = 'bold';
td.style.textAlign = 'center';
td.style.backgroundColor = '#B0C4DE';
};
//Initialisation des données de la grille.
var data = [["Compétences","Description","Code",""],
["", "", "",""],
["","", "",""],
["","", "",""],
["","", "",""],
["","", "",""]];
//Création de la grille
hot = new Handsontable(container, {
data: data,
height: 800,
width: 1183,
colWidths: [35,200,25,80],
manualRowResize: true,
colHeaders: true,
rowHeaders: true,
mergeCells: true,
stretchH: 'all',
columnSorting: true,
contextMenu: true,
contextMenuCopyPaste: {
swfPath: './zeroclipboard/dist/ZeroClipboard.swf'
},
//Fonctionnalités lors d'un clic droit dans la grille.
contextMenu: {
items: {
"row_above": {
name: 'Insérer ligne au dessus',
disabled: function () {
return hot.getSelected()[0] === 0;
}
},
"row_below": {
name: 'Insérer ligne en dessous',
disabled: function() {
return hot.getSelected()[0] === 0;
}
},
"hsep1": "---------",
"col_left": {
name: 'Insérer colonne à gauche',
disabled: function () {
return hot.getSelected()[0] === 0;
}
},
"col_right": {
name: 'Insérer colonne à droite',
disabled: function() {
return hot.getSelected()[0] === 0;
}
},
"hsep2": "---------",
"remove_row": {
name: 'Supprimer la ligne',
disabled: function () {
return hot.getSelected()[0] === 0;
}
},
"remove_col": {
name: 'Supprimer la colonne',
disabled: function () {
return hot.getSelected()[0] === 0;
}
},
"hsep3": "---------",
"copy": {
name:'Copier',
disabled: function () {
return hot.getSelected()[0] === 0;
}
},
"paste": {
name: 'Coller',
disabled: function(){
return hot.getSelected()[0] === 0;
}
},
"hsep4": "---------",
"undo": {
name:'Précédent',
disabled: function(){
return hot.getSelected()[0] === 0;
}
},
"redo": {
name: 'Suivant',
disabled: function(){
return hot.getSelected()[0] === 0;
}
},
"hsep5": "---------",
"make_read_only": {
name: 'Lecture seule',
disabled: function() {
return hot.getSelected()[0] === 0;
}
},
"alignment": {
name: 'Alignement du texte',
disabled: function () {
return hot.getSelected()[0] === 0;
}
},
"mergeCells": {
name: 'Fusionner les cellules',
disabled: function () {
return hot.getSelected()[0] === 0;
}
},
},
},
//Entetes de la grille en lecture seule.
cells: function(row, col, prop) {
var cellProperties = {};
if(row===0){
cellProperties.renderer = headerRenderer;
}
if(row === 0 && col <3){
cellProperties.readOnly = true;
}
return cellProperties;
}
});
//Lors d'un clic sur le bouton valider, transmission des données de la grille.
});
document.getElementById('save').onclick=function () {
$.ajax({
url: "testGetData.php",
dataType: 'json',
data: {'data':hot.getData()}, //retourne les données des cellules
type: 'GET',
success: function (data) {
alert(data);
},
});
document.location.href='testGetData.php';
};
`
And here is the code for testGetData.php :
<?php
foreach($_GET['data'] as $value)
echo $value;
?>
The problem is that testGetData.php seems to not receive the $_GET['data']. I tried many differents things I've seen on forums or the Handsontable's doc. I thought the cause was the scope, but I did the same as the examples (At least i believe ^^).
Can you help me please ? I don't understand what's wrong. I need a fresh look at my code.
The problem was not related with hansontable but with the way you sent the data using the jQuery ajax method: You specified a
dataType: 'json'
but the processing .php file returned a plain text format.You should change two things, first in your .html-file:
Replace the
document.getElementById('save').onclick=function () { ... }
function with:(What is the point of including the jQuery library if you don't use it ...) The stuff inside is more or less unchanged, although I changed the
success()
function a litle bit. It will reformat the returned JavaScript objectretobj
back into a JSON format again, so you will be able to see all its elements. The clever thing about the jQueryajax()
method withdataType:'json'
is, that the data returned from the .php script will appear in thesuccess()
function already as a JavaScript object without you having to do anything!And secondly - the most important thing - in your .php file:
In order to supply the
success()
function with the desiredjson
formatted string thetestGetData.php
script needs to return some data in ajson
format. The easiest way of doing this is to use the php functionjson_encode()
:Assuming that
hot.getData()
delivered an array like this one:Then the alert function will return the following string after the
#save
-button was clicked (I tested it - without handsontable though):