0

我正在使用 Phonegap 迈出第一步,但无法从我的服务中获取任何内容。

function onDeviceReady() {
  $.mobile.allowCrossDomainPages = true;
  $.support.cors = true;

  $.ajax({
    type: 'GET',
    url: BaseUri + 'industries',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (msg) {
        alert('bla');
        var html = [];
        $.each(msg || [], function(idx, industry) {
            html.push('<li>' + industry.Title + '</li>');
        });

        $('#lstIndustries').html(html.join(''));
    },
    error: function(xhr, msg, err) {
        alert(xhr.status);
        alert(err);
    }
  });
}

$(document).ready(function() {
    document.addEventListener("deviceready", onDeviceReady, true);
});

它总是调用错误函数。当我将 contentType/dataType 更改为 text 时,将调用成功函数,但响应为空。

我将以下行添加到我的assets/www/config.xml

<access origin="*" />

任何建议如何解决这个问题?:)

4

2 回答 2

0

您是否尝试将 dataType 设置为“jsonp”?由于浏览器的安全限制,您必须指定使用 jsonp 或添加回调=?到你的 json 电话。所以这两种方法中的任何一种:

jsonp:

dataType: 'jsonp'

回调方法:

url: BaseUri + 'industries&callback=?',
dataType: 'json'

此外,为了让 cors 工作,我认为这也需要在您从中获取数据的服务器上启用。

您可能还想尝试看看是否可以在不等待 onDeviceReady 的情况下在浏览器中获取数据,这只会在您的设备上查看时触发。

希望这可以帮助。

于 2013-05-28T18:57:50.933 回答
0

我在开发时尝试过类似的问题。在我的 config.xml 中使用模拟器时,我必须具备以下条件:

<access origin="http://127.0.0.1*"/> <!-- allow local pages -->
<access origin="http://10.0.2.2" subdomains="true"/>

还可以尝试直接从浏览器测试 API,以查看问题所在的 API 或模拟器

于 2013-05-28T19:14:05.803 回答