我有一个非常简单的Cordova应用程序尝试进行AJAX POST。
请求的网址simple.php如下所示:
<?php
header('Access-Control-Allow-Origin: *');
die ( json_encode ( array('result'=>'ok') ) );
?>
index.html就是这样:
<head>
<script src="jquery.js"></script>
<script>
$(document).ready( function() {
$.ajax(
{
type: 'POST',
url: 'http://drawonthe.net/simple.php',
contentType: 'text/plain',
xhrFields: {
withCredentials: false
},
success: function(res) {
alert('got this res : ');
alert(JSON.stringify(res));
},
error: function(err) {
alert('got this fail : ');
alert(JSON.stringify(err));
}
});
});
</script>
</head>
<body>
</body>
我的Cordova config.xml文件包含以下内容:
<content src="index.html" />
<access origin="*" />
<allow-intent href="*" />
<allow-navigation href="*" />
<access origin="content:///*" />
我的应用包含cordova-plugin-whitelist
插件。
我在index.html中尝试过各种CSP,但没有取得好成绩。例如
<meta http-equiv="Content-Security-Policy" content="default-src *; script-src * 'unsafe-eval' 'unsafe-inline'; connect-src *; img-src *; style-src * 'unsafe-inline' ; media-src *; ">
当我在本地(从文件://)访问此HTML页面时,我得到XMLHttpRequest cannot load http://drawonthe.net/simple.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403.
并返回{"readyState":0,"status":0,"statusText":"error"}
。
当我通过托管在本地服务器上访问HTML页面时,它无需投诉。 (正确答复:"{\"result\":\"ok\"}"
)
当我在Android或iOS设备上将其作为Cordova应用程序运行时,我得到{"readyState":4, "responseText":"<!DOCTYPE HTML PUBLIC \" -//IETF//DTD HTML 2.0//EN\">... blah blah ... 403 Forbidden ... , "status":403, "statusText": "Forbidden"}
。
发生了什么? 如何通过手机应用程序提供此请求?
答案 0 :(得分:0)
当我在我的服务器上禁用ModSecurity 时,此问题已得到解决。
对我来说,我能够通过cPanel访问我的主机来做到这一点:
cPanel&gt;安全&gt; ModSecurity的
我希望这有助于他人 谢谢@jcesarmobile指出问题必须与服务器有关。