我正在尝试使用jQuery从我正在使用的phonegap应用程序将数据作为POST数据发送到本地页面:
$.ajax({
method: "POST",
url: "http://.../api_return.php",
data: { name: "John", location: "Boston" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
在我的api_return.php
页面上,我有以下代码:
<?php
print_r($_REQUEST);
?>
奇怪的是,如果我创建url: "http://.../api_return.php?test=true",
然后我的php返回test=true
,我就无法返回POST
数据。
我尝试过:<access origin="*" />
在config.xml
中
AndroidManifest.xml中的<uses-permission android:name="android.permission.INTERNET" />
答案 0 :(得分:4)
我设法让它工作,但不幸的是我不知道哪个改变最终使这项工作。以下是我所做的更改列表:
1)在config.xml中添加<access origin="*" />
2)在AndroidManifest.xml中添加<uses-permission android:name="android.permission.INTERNET" />
3)在connect-src *;
内添加content=""
元标记:<meta http-equiv="Content-Security-Policy" content="" />
4)JSON.stringify中包装的数据。结束ajax电话:
$.ajax({
type: "POST",
url: "http://www.example.com/apicallback.php", // Example
data: JSON.stringify({ "name": "John", "location": "Boston" }),
success: function(response) {
console.log(response);
alert(JSON.stringify(response));
},
error: function(e) {
alert('Error: ' + e.message);
}
});
5)重定向到第二个网址(在.htaccess文件夹中没有使用RewriteCond
的网址)
答案 1 :(得分:2)
您也可以在请求标题中查看"Content-type":"application/x-www-form-urlencoded"
。
您可能会在原始php://input
中找到您的帖子输入,但如果您在没有$_POST
的情况下发送,则无法在"Content-type":"application/x-www-form-urlencoded"
中找到。
答案 2 :(得分:0)
我认为问题可能在于您的PHP:
<?php
echo json_encode($_POST);
?>
答案 3 :(得分:0)
对于$ .ajax,某些版本的JQuery存在设置方法的已知问题。改为使用“类型”。
$.ajax({
url: "http://.../api_return.php",
data: { name: "John", location: "Boston" },
cache: false,
type: 'POST',
success: function (data) {
alert(data);
console.log(data)
}
});
答案 4 :(得分:0)
使用你的选项我被困在这一段时间了。我认为选项3是重要的一个!
connect-src *;
分配给content=""
元标记:<meta http-equiv="Content-Security-Policy" content="" />
我看到的错误是:
无法在'xmlhttprequest'上执行'open'拒绝连接
所以,这就是我用于内容安全政策:
的内容<meta http-equiv="Content-Security-Policy"
content="default-src * 'self' 'unsafe-inline' data: gap: 'unsafe-eval';
style-src * 'self' 'unsafe-inline';
connect-src * ;
script-src * 'self' 'unsafe-inline';
media-src *">
它有效!