使用 Visual Studio 的 Cordova 中的 HTTP POST 失败
HTTP POST Failure in Cordova using Visual Studio
我一直在尝试获得一个简单的 HTTP POST 来将基于 cordova 的应用程序连接到服务器(基于php)。
我编写了一个简单的 php 文件,仅用于测试目的。
Php代码:
<?php
if (isset($_POST["TEST"])){
echo "TEST WORKS!!";
}
?>
现在我的 cordova 应用程序中的 jquery 代码>
// For an introduction to the Blank template, see the following documentation:
// http://go.microsoft.com/fwlink/?LinkID=397704
// To debug code on page load in Ripple or on Android devices/emulators: launch your app, set breakpoints,
// and then run "window.location.reload()" in the JavaScript Console.
(function () {
"use strict";
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
function onDeviceReady() {
// Handle the Cordova pause and resume events
document.addEventListener('pause', onPause.bind(this), false);
document.addEventListener('resume', onResume.bind(this), false);
// TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
//My Code
$('#btnSend').on('click', function () {
$.post('http://mobtest.bugs3.com/test.php',
{ TEST: 'TEST' },
function (result) {
alert(result);
$('#txtlbl').text(result);
},
function (error) {
alert(error);
$('#txtlbl').text(error);
}
);
});
};
function onPause() {
// TODO: This application has been suspended. Save application state here.
};
function onResume() {
// TODO: This application has been reactivated. Restore application state here.
};
})();
这是基于 visual studio 为 apache/cordova 提供的模板构建的。
单击按钮时,我在控制台中看到以下消息:
http://localhost:4400/ripple/xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//mobtest.bugs3.com/test.php Failed to load resource: net::ERR_CONNECTION_REFUSED
其中 http://mobtest.bugs3.com/test.php
是 php 文件的 url。
编辑
经过一番研究,我发现问题出在跨域代理上。
现在最新的错误信息是:
XMLHttpRequest cannot load http://mobtest.bugs3.com/test.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4414' is therefore not allowed access.
正在寻求有关此问题的帮助。
问题解决了。
使用 RIPPLE 模拟器时,SETTINGS->CROSS DOMAIN PROXY = REMOTE
否则跨域请求被拦截。
找到答案here。将 跨域代理 设置更改为 "Remote" 或 "Disabled"。默认设置为"Local",不允许跨域资源访问。
我一直在尝试获得一个简单的 HTTP POST 来将基于 cordova 的应用程序连接到服务器(基于php)。
我编写了一个简单的 php 文件,仅用于测试目的。
Php代码:
<?php
if (isset($_POST["TEST"])){
echo "TEST WORKS!!";
}
?>
现在我的 cordova 应用程序中的 jquery 代码>
// For an introduction to the Blank template, see the following documentation:
// http://go.microsoft.com/fwlink/?LinkID=397704
// To debug code on page load in Ripple or on Android devices/emulators: launch your app, set breakpoints,
// and then run "window.location.reload()" in the JavaScript Console.
(function () {
"use strict";
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
function onDeviceReady() {
// Handle the Cordova pause and resume events
document.addEventListener('pause', onPause.bind(this), false);
document.addEventListener('resume', onResume.bind(this), false);
// TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
//My Code
$('#btnSend').on('click', function () {
$.post('http://mobtest.bugs3.com/test.php',
{ TEST: 'TEST' },
function (result) {
alert(result);
$('#txtlbl').text(result);
},
function (error) {
alert(error);
$('#txtlbl').text(error);
}
);
});
};
function onPause() {
// TODO: This application has been suspended. Save application state here.
};
function onResume() {
// TODO: This application has been reactivated. Restore application state here.
};
})();
这是基于 visual studio 为 apache/cordova 提供的模板构建的。
单击按钮时,我在控制台中看到以下消息:
http://localhost:4400/ripple/xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//mobtest.bugs3.com/test.php Failed to load resource: net::ERR_CONNECTION_REFUSED
其中 http://mobtest.bugs3.com/test.php
是 php 文件的 url。
编辑
经过一番研究,我发现问题出在跨域代理上。
现在最新的错误信息是:
XMLHttpRequest cannot load http://mobtest.bugs3.com/test.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4414' is therefore not allowed access.
正在寻求有关此问题的帮助。
问题解决了。 使用 RIPPLE 模拟器时,SETTINGS->CROSS DOMAIN PROXY = REMOTE
否则跨域请求被拦截。
找到答案here。将 跨域代理 设置更改为 "Remote" 或 "Disabled"。默认设置为"Local",不允许跨域资源访问。