1

フロントエンドにJS/HTML5のみ、バックエンドに.NETを使用して、Phonegapを使用してiPhoneアプリに取り組んでいます。ログインについては、Web サービスを呼び出して JSON を取得するだけです。私が抱えている問題は、デスクトップブラウザでこれをデバッグするときと、実際の電話/シミュレータでデバッグするときです。

有効なログインがある場合、取得される JSON は次のようになります。

{"AuthToken":null,"Errors":[],"Success":true,"Message":null,"IsValid":true}

だから私はこのAjaxsuccess関数(jQuery)を持っています:

success: function (data) {
    //this works on phone, but not in browser
    var success = data.Success;  //returns true             
    //this works in browser, but errors out on phone
    var dta = JSON.parse(data);
   success = dta.Success //returns true;
}

なぜこれが起こるのか、どうすれば修正できるのでしょうか? 常にシミュレーターを使用する代わりに、Firebug を使用してブラウザーでデバッグする方が簡単です。私は他のデバッグ方法をいくつか使用してきましたが (1 つには Weinre)、Firebug を使用するほど優れた方法はありません。

4

2 に答える 2

1

私は昨日同じ問題を抱えていました.iPhoneではスムーズに行きましたが、ウェブではうまくいきませんでした.

いくつかの検索の結果dataType: 'jsonp'、 を設定し、コールバック関数を設定すると、jsonp: 'jsoncallback'

私のハンドラーは次のようになります。

$('form').on('submit', function(event){
        var myData = $(this).serialize();
        jQuery.ajax({
            url: 'www.mysite.com/submit.php',
            type: 'POST',
            data: myData,
            dataType: 'jsonp',
            jsonp: 'jsoncallback',
            success: function(data, textStatus, jqXHR){
                alert('success: ' + data)
                },
            error:  function(jqXHR, textStatus, errorThrown){
                alert('error')
                }
            });
        return false;
        })

サーバー側では、次のように終了します。

echo $_GET['jsoncallback'] . '(' . json_encode($myData) . ');'

ローカルディレクトリがサーバーと同じドメインにないため、同じオリジンポリシーについて何か。どうやら jsonp (padded の場合は p) はクロスドメインで動作するようです。

更新: ヒントを入手した場所はここです。

.NET コードを提供できればと思いますが、これがお役に立てば幸いです

于 2012-08-07T20:04:22.873 に答える
0

シンプルな小さなもの..

Web 側で動作させるには、呼び出しのパラメーターに dataType: "json" を追加する必要があります。

于 2012-08-07T19:47:46.930 に答える