我在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中的所有域(*)。
感谢。
答案 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_name
和last_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}}));
}
我发现这种方法比不使用不可见形式更清晰。