将发布数据从Phonegap(Cordova)发送到服务器

时间:2014-05-15 01:27:04

标签: codeigniter cordova postdata

我在Cordova应用程序中有一个表单:

<form id='transport' method='POST' action='' enctype='application/json'>
    <input type='hidden' id='data' name='data' value='' />
</form>

我发送到服务器(纯js):

postdata = '{';
postdata += '"first_name": "Jon",';
postdata += '"last_name": "Snow"';
postdata += '}';

document.getElementById('data').value = postdata;
document.getElementById('transport').action = 'http://testserver.com/add_user/';
document.getElementById('transport').submit();

data 变量在服务器上收到时为空。

在服务器上我使用 Codeigniter

在网络场景中完美运作,为什么不在科尔多瓦?我知道没有跨域问题,我已经允许config.xml中的所有域(*)。

感谢。

2 个答案:

答案 0 :(得分:1)

固定!只需删除网址末尾的斜杠(/)即可。

这是因为Codeigniter - 带有这个斜杠 - 期待另一个参数(由于其基于url的性质),如果没有,控制器内的所有变量(例如POST数据)都为空。

所以这个:

postdata = '{';
postdata += '"first_name": "Jon",';
postdata += '"last_name": "Snow"';
postdata += '}';

document.getElementById('data').value = postdata;
document.getElementById('transport').action = 'http://testserver.com/add_user';
document.getElementById('transport').submit();

这是对的。

答案 1 :(得分:0)

您可以使用xmlhttp来使用纯JS实现此目的。

这个省略了data变量的包装,因此您将first_namelast_name作为自己的参数。

function addUser(first_name, last_name){
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            alert("successfully added user");
            console.log(xmlhttp.response);//this is the response from the server
        }
    }

    params = "first_name=" + first_name + "&last_name=" + last_name;

    xmlhttp.open("POST", "http://testserver.com/add_user",true);

    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", params.length);
    xmlhttp.setRequestHeader("Connection", "close");

    xmlhttp.send(params);
}

你也可以像JSON一样发送数据:

function addUser(first_name, last_name){
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            alert("successfully added user");
            console.log(xmlhttp.response);//this is the response from the server
        }
    }
    xmlhttp.open("POST", "http://testserver.com/add_user",true);

    xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    //Not sure if you need the Content-length here or not. 

    xmlhttp.send(JSON.stringify({"data"=>{"first_name"=>first_name, "last_name" => last_name}}));
}

我发现这种方法比不使用不可见形式更清晰。