Ajax“POST"不能在iOS上运行

Ajax "POST" not working in iOS

本文关键字:iOS 运行 不能 POST quot Ajax      更新时间:2023-09-26

我有一个奇怪的问题与Javascript, AJAX和发送"POST"信息到服务器…我正在制作一个HTML5/Javascript(纯JS, 没有jQuery!)游戏,通过CocoonJS在iOS和Android上运行。我需要使用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, POSTGLOBALS都没有捕获任何东西…我假设,我的应用实际上没有发送任何东西。然而,由于相同的代码在Android设备上工作,我不知道我可能做错了什么…

有谁知道会发生什么,我该如何解决它吗?

提前感谢您的时间和精力!:)

如果您正在使用Canvas+,请尝试从Canvas+环境中POST,如果它不起作用,请在WebView中尝试。两者中的一个应该都能工作:)