J'essaye de ranger un peu de code hérité.
Ce qui suit est une coupe vers le bas des principales parties du code qui fait la demande ajax:
var xmlHttp;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
} catch (e) {
// Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
$j.prompt("Your browser does not support AJAX!");
return;
}
}
}
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
// Get the data from the server's response
// returns json data
//i know, don't ask
eval(xmlHttp.responseText);
// doing stuff with the json data
...
etc
}
}
xmlHttp.open("POST","fetchData.php",true);
//sample data passed
var request ="51.5&-0.12";
xmlHttp.send(request);
Je suis en train de se convertir à:
$j.ajax({
type: "POST",
url: "fetchData.php",
success: function(data) {
mapFn._showSidebarHotels(data);
},
cache: false,
data: "51.5&-0.12",
dataType: "json",
processData: false
})
Le code existant Renseigne le $ HTTP_RAW_POST_DATA var que le code backend hérité (que je préfère ne pas modifier) utilise. Lorsque vous utilisez l'appel jquery, $ HTTP_RAW_POST_DATA ne semble pas être rempli et ce qui est bizarre, c'est que le $ _POST [] semble être vide. J'ai remarqué que la différence dans l'onglet POST de firebug lors de la comparaison des deux appels ajax est que la version de jquery a "application/x-www-form-urlencoded" comme plus d'informations où l'appel hérité n'est pas.
Je crois que le problème est dû au type d'en-têtes envoyés avec la requête jquery ajax mais je ne suis pas sûr de savoir comment je peux les manipuler en utilisant jquery.
Mes questions sont les suivantes:
- est mon appel jquery correct? Étant donné que j'ai un tableau $ POST vide
- Comment remplir le $ HTTP_RAW_POST_DATA en utilisant les paramètres de jquery?
J'avais déjà défini "processData: false" comme mon exemple ci-dessus. D'autres idées? – thiswayup
J'ai 2 autres clés dans la demande ajax: ContentType: 'text/xml', tapez : 'POST' Avec ceux-ci, je peux lire le contenu en PHP en utilisant si ('POST' == $ HTTPMethod) { // $ body = file_get_contents ("php: // entrée"); $ body = $ HTTP_RAW_POST_DATA; } Pour que le HTTP_RAW_POST_DATA fonctionne, j'ai activé le réglage php.ini always_populate_raw_post_data = On – user906825