2

このビデオ ( http://youtu.be/5F7Gx0-W-M4 ) を見て、最初の Sencha touch 2 アプリを作成しました。ストア ページは次のような構造になっています。

Ext.define('FirstApp.store.Places',{
    extend:'Ext.data.Store',

    config:{

        autoLoad:true,
        model:'FirstApp.model.Place',
        proxy:{
            type:'ajax',
            url:'https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AIzaSyCFWZSKDslql5GZR0OJlVcgoQJP1UKgZ5U',
            reader:{
                type:'json',
                rootProperty:'results'
            }
        }
    }
})

ビルド後 (「sencha app build native」を実行した後) パッケージは MAC (すべてのブラウザー) で非常にうまく動作しますが、生成されたアプリ (nexus phone で実行しています) は動作しますが、Google からデータを収集しません。 json をマップします。どんな助けでもいただければ幸いです

4

1 に答える 1

3

あなたが参照している例は、グーグルマップの場所検索APIを使用しています。proxyに設定された携帯電話用のアプリをビルドする場合、このAPIを使用することはできませんajax。基本的に、ドメイン外のリソースは使用できません。あなたのサイトがyourdomain.comにあり、someotherdomain.comがある場合のように、そのドメインで許可されていない限り、yourdomain.comからこのsomeotherdomain.comにajaxリクエストを行うことはできません。この場合、モバイルアプリにはドメインがありません。Webview内にページをロードしているだけです。

その理由は、ajaxがクロスオリジンリソースをロードできないためです。--disable-web-securityフラグ付きのChromeを使用していると思われるため、アプリのビルドはブラウザで機能します。CORSを使用するには、JsonPプロキシを使用する必要があります。モバイルアプリ用にパッケージ化する場合は、これが唯一の方法です。場合によっては、サーバーを所有している場合(ただし、このコンテキストではありません)、次のような適切なヘッダーを設定することでCORSを許可できます。

Access-Control-Allow-Origin: *

また

Access-Control-Allow-Origin: http://yourdomain.com/resource

プロキシをJsonPに設定してみてください。

于 2013-02-08T18:30:33.983 に答える