Ajax "POST" не работает в iOS
У меня странная проблема с Javascript, AJAX и отправкой на сервер информации "POST"... Я работаю в игре HTML5 / Javascript (обычный JS, без jQuery!), Которая запускается как на iOS, так и на Android через CocoonJS. Мне нужно передать некоторые вещи в сценарий сервера, используя метод POST (не GET): он отлично работает при тестировании на устройстве Android (Nexus 5), но при тестировании на устройствах iOS (iPhone 4 и 5 с iOS 7) серверный скрипт ничего не получает (хотя используемый метод точно такой же, как в Android)...
Я читал кое-что о кешировании Safari "POSTS" и так далее, но я точно не знаю, как это может быть связано с моей проблемой, так как я использую CocoonJS...
Я регистрировал информацию перед отправкой, и она собрана правильно; однако, при попытке войти из серверного скрипта, он пуст...
Вот что я делаю на стороне клиента:
create_XHR: function(){
var XHR = null;
if (window.XMLHttpRequest){
XHR = new XMLHttpRequest();
}
else if(window.ActiveXObject){
try {
XHR = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
XHR = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else {
alert("Your navigator is old to run objets XMLHTTPRequest...");
XHR = false;
}
return XHR;
},
ajax_post: function(page, data, share) {
var XHR = game.create_XHR();
XHR.open("POST", page, true);
XHR.onreadystatechange = function() {
if (XHR.readyState === 4 && (XHR.status === 200 || XHR.status === 0)) {
// Do some stuff here
}
};
console.log("DATA TO BE PASSED: "+data.imgdata);
XHR.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
XHR.send(data.imgdata);
},
Странная часть заключается в том, что "материал", который я делаю, когда возвращается вызов AJAX, фактически выполнен, поэтому вызов AJAX возвращается без ошибок...
Эти функции вызываются в другой части кода, и DATA TO BE PASSED
Журнал показывает ожидаемые данные, которые должны быть отправлены на сервер... Однако, при попытке войти в сценарий сервера...
<?php
$imageData = '';
if(isset($_POST['imgdata']))
{
$imageData = $_POST['imgdata'];
}else if(isset($_GET['imgdata'])){
$imageData = $_GET['imgdata'];
}else{
$imageData = $GLOBALS['HTTP_RAW_POST_DATA'];
}
mail(MYMAIL,"LOG","POST: ".$_POST['imgdata']." \n GET: ".$_GET['imgdata']." \n GLOBALS: ".$GLOBALS['HTTP_RAW_POST_DATA']." \n IMGDATA: ".$imageData);
Сообщение полностью пустое, поэтому ни GET
ни POST
ни GLOBALS
ловит что-нибудь... Я предполагаю, что мое приложение на самом деле ничего не отправляет. Однако, поскольку тот же самый точный код работает на устройствах Android, я не знаю, что я могу делать неправильно...
Кто-нибудь знает, что может происходить и как я могу это решить?
Заранее спасибо за ваше время и усилия!:)
1 ответ
Если вы используете Canvas+, попробуйте выполнить POST из среды Canvas+, если она не работает, попробуйте в WebView. Один из обоих на самом деле должен работать:)