Я благодарю вас, чтобы высказать свое мнение об этом загадочном поведении:
Этот код работает:
JS код:
$.ajax({
url: "ajouterEntreeParExcel.ajax.php", // url de la page à charger
data: {"name":"John","date":"05 & 06 mars"},
cache: false, // pas de mise en cache
async: false,
contentType : "application/json",
dataType: "json",
success:function(jsonRetour){
},
error:function(XMLHttpRequest, textStatus, errorThrows){ // erreur durant la requete
}
});
И PHP-код:
$name = $_GET["nom"];
$date = $_GET["date"];
И этот не работает
var dataAjax = {};
dataAjax["name"] = "John";
dataAjax["date"] = "05 & 06 mars";
var entree = JSON.stringify(dataAjax);
$.ajax({
url: "ajouterEntreeParExcel.ajax.php", // url de la page à charger
data: entree,
cache: false, // pas de mise en cache
async: false,
contentType : "application/json",
dataType: "json",
success:function(jsonRetour){
},
error:function(XMLHttpRequest, textStatus, errorThrows){ // erreur durant la requete
}
});
С тем же кодом PHP.
В Debug с firebug я проверяю переменную «entree», и она хорошо отформатирована, но я ничего не получаю в сторону PHP.
Примечание: я предпочитаю использовать тип GET, а не тип POST.
Любая идея ?
Это потому, что в первом запросе вы отправляете данные как x-www-form-urlencoded
, чего ожидает ваш PHP-код:
name=John&date=05 & 06 mars
Тогда как во втором вы отправляете данные в формате JSON в запросе, например:
'{"name":"John","date":"05 & 06 mars"}'
Также обратите внимание, что вы должны удалить async: false
как это считается ужасной практикой его использования. Если вы проверите свою консоль, вы увидите предупреждение браузера об ее использовании.
Таким образом, чтобы иметь версию, работающую с объектом и с заданным откликом, этот код работает:
var dataAjax = {};
dataAjax["date"] = obj["Date"];
dataAjax["comite"] = obj["Comité Int.Rég."];$.ajax({
url: "ajouterEntreeParExcel.ajax.php", // url de la page à charger
data: dataAjax,
cache: false, // pas de mise en cache
//async: false,
//contentType : "application/json",
dataType: "json",
success:function(jsonRetour){
printValueTraitee = printValueTraitee + '<span class="green">OK</span>';
},
error:function(XMLHttpRequest, textStatus, errorThrows){ // erreur durant la requete
printValueTraitee = printValueTraitee + '<span class="red">KO</span>';
}
});
Так что я больше не отправляю свои данные в формате JSON, но выкладываю их как объект, не разбирая его.