簡體   English   中英

Ajax請求通過瀏覽器工作,而不是通過iOS或Android模擬器中的Cordova應用程序工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM