10

私はいくつかの既存のコードに取り組んでいます。次のコードがあります。

$.ajax({
        type: "get",
        url: url ,
        dataType: "jsonp",
        cache: "false",
        jsonpCallback: "onJSONPLoad",
        success: function(json){
               alert('hi!');
               //perform operation
        },
        error: function() {
          alert('Error occurs!');
       }
});

現在、有効なパスを渡すurlと正常に動作します。しかし、無効を渡すurlと、エラーアラートが発生するはずです。しかし、スクリプトはエラー アラートをスローしていません。基本的に、パラメーターを検証したいurlですか、それとも失敗していますか? コード内のエラーを見つけるのを手伝ってください。または、別の方法で達成する方法を提案してください。次のリンクを確認しましたが、問題を解決できませんでした:

jQuery Ajax エラー処理、カスタム例外メッセージの表示
jQuery ajax エラー関数Ajax 成功およびエラー関数の失敗

更新: 以下のコードを追加して、jquery コンソール ログを記録しました。

  @Override
            public boolean onConsoleMessage(ConsoleMessage cm) {
                Log.d("web chrome client", cm.message() + " -- From line "
                + cm.lineNumber() + " of "
                + cm.sourceId() );
                return true;
            }

次のエラーを特定しました: XMLHttpRequest cannot load file:///android_asset/xxxx/new_source.json?callback=onJSONPLoad. Origin null is not allowed by Access-Control-Allow-Origin. -- From line 1 of null

次のコードを追加すると、アプリは正常に実行されます。

if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
  webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
}

したがって、基本的にこれは、jquery が URL にアクセスできないために発生しています。
私を助けてくれてありがとう。

4

4 に答える 4

18

これを使った

1) これを置き換えます : dataType:クロスドメイン リクエストの jsonp。つまり、別のドメインへのリクエストを意味し、

dataType:同一ドメイン同一オリジン リクエストの json。 データ型: "json"

2)成功関数の後に「,」がありません

$.ajax({
        type: "get",
        url: url ,
        dataType: "json",
        cache: "false",
        jsonpCallback: "onJSONPLoad",
        success: function(json){
               alert('hi!');
               //perform operation
        },
        error: function() {
          alert('Error occurs!');
       }
});

3)これを試してください

error: function(jqXHR, exception) {
            if (jqXHR.status === 0) {
                alert('Not connect.\n Verify Network.');
            } else if (jqXHR.status == 404) {
                alert('Requested page not found. [404]');
            } else if (jqXHR.status == 500) {
                alert('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                alert('Requested JSON parse failed.');
            } else if (exception === 'timeout') {
                alert('Time out error.');
            } else if (exception === 'abort') {
                alert('Ajax request aborted.');
            } else {
                alert('Uncaught Error.\n' + jqXHR.responseText);
            }
        }

4) このjQuery.ajaxを確認してください

json 型は、取得したデータ ファイルを JavaScript オブジェクトとして解析し、構築されたオブジェクトを結果データとして返します。そのために、ブラウザがサポートしている場合は jQuery.parseJSON() を使用します。それ以外の場合は、Function コンストラクターを使用します。不正な形式の JSON データは、解析エラーをスローします (詳細については、json.org を参照してください)。JSON データは、JavaScript が解析しやすい簡潔で簡単な方法で構造化データをやり取りするのに便利です。取得したデータ ファイルがリモート サーバーに存在する場合は、代わりに jsonp タイプを指定します。

jsonp タイプは、callback=? のクエリ文字列パラメーターを追加します。URLに。サーバーは、JSON データの先頭にコールバック名を追加して、有効な JSONP 応答を形成する必要があります。$.ajax() の jsonp オプションで callback 以外のパラメータ名を指定できます。

注: JSONP は JSON 形式の拡張であり、クエリ文字列パラメーターを検出して処理するにはサーバー側のコードが必要です。詳細については、その使用法を詳述した元の投稿を参照してください。

リモート サーバーからデータを取得する場合 (スクリプトまたは jsonp データ型を使用した場合のみ可能)、エラー コールバックとグローバル イベントは決して発生しません。

ただし、起動してからコードを実行する必要があります:

var req = $.ajax({
    url : url,
    dataType : "jsonp",
    timeout : 10000
});

req.success(function() {
    console.log('Yes! Success!');
});

req.error(function() {
    console.log('Oh noes!');
});
于 2013-09-25T06:05:44.383 に答える
1

成功関数の後にカンマがなく、dataType を json に変更します

$.ajax({
        type: "get",
        url: url ,
        dataType: "json",
        cache: "false",
        jsonpCallback: "onJSONPLoad",
        success: function(json){
               alert('hi!');
               //perform operation
        },
        error: function() {
          alert('Error occurs!');
       }
});
于 2013-09-25T06:04:53.027 に答える
0

これで試してみてください。

     $.ajax({
                type: "get",
                url: url ,
                dataType: "jsonp",
                cache: "false",
                jsonpCallback: "onJSONPLoad",
                success: function(result){
                       alert('hi!');
                       //perform operation
                },    
               error: function( req, status, err ) {
                 console.log( 'something went wrong', status, err );
                 alert('something went wrong'+ status + err); 
               } 
      });

これも読んでください。 http://api.jquery.com/jQuery.getJSON/#entry-examples

$.getJSON()代わりに試してください $.ajax()

于 2013-09-25T06:15:51.337 に答える