[英]Ajax Request Works via Browser, not via Cordova app in iOS or Android emulators
我有一個正在構建的jQuery Phonegap應用程序。 以下Ajax請求可在我的瀏覽器中使用:
<script type="text/javascript">
$(document).bind("mobileinit", function() {
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
});
$(document).ready(function() {
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
// Load Meet List
var requestData = {
'action' : "getmeetlist"
};
$.ajax({
type : 'GET',
url : 'http://forum.mastersswimmingqld.org.au/swimman/xmltest.php',
data : requestData,
datatype: 'xml',
encode : true,
error: function(xhr, settings, exception){
alert('The update server could not be contacted.');
},
})
.done (function(data) {
// Render data
$(data).find('meet').each(function(){
var id = $(this).attr("id");
var meetName = $(this).find('meetname').text();
var startDate = $(this).find('startdate').text();
$("#meetlist").append("<li><a id=\"" + id + "\" class=\"meetLink\"><h2>" + meetName + "</h2><p>" + startDate + "</p></a></li>");
});
$("#meetlist").listview('refresh');
});
但是,當我通過任何一個仿真器運行它時,它永遠不會起作用。 我的config.xml中包含以下內容:
<access origin="*" />
有什么建議么? 我已經閱讀了有關Phonegap應用程序的白名單和jQuery頁面。 無論我做什么,仍然沒有運氣。 我唯一的線索是,當我通過瀏覽器訪問此頁面時(特別是如果通過“后退”按鈕到達),該列表直到我單擊刷新才會出現。
我將這些標頭放在生成我的xml的php中:
header("Access-Control-Allow-Origin: *");
header('Content-type: text/xml');
我放在后面的那是因為當列表沒有出現時,控制台會顯示一條消息“格式不正確”,但通常不會出現AJAX請求的行號。
有什么建議么?
謝謝,
大衛
我有同樣的問題。 Ajax請求作為跨域請求被阻止。 我必須以以下方式使用jsonp來解決此問題。
$.ajax({timeout: 5000,
url: 'http://yoursite.com/yourscript.php',
dataType: "jsonp",
callback: 'callback',
jsonpCallback: 'yourcallback',
type: "GET",
crossDomain: true,
data: {'scriptinput':'data string you send'}
});
function yourcallback(response) {
console.log(response);
}
這是一個在PHP服務器端對我有效的示例。 您需要修改腳本以返回json。 通過一個SendAnswer()
對象,其中包含您要返回的數據。
function SendAnswer($response) {
// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
header("content-type: application/json");
$callback = filter_input(INPUT_GET, 'callback', FILTER_SANITIZE_SPECIAL_CHARS);
echo "$callback(" . json_encode($response) . ")";
}
祝您項目順利。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.