1

私のアプリでは、登録時に gravatar からユーザーのプロファイルを取得しようとしています。そのため、ユーザーは姓名を入力する必要がありません。私は以下のコードを使用しています -

    $.ajax({
                url: "http://www.gravatar.com/" + get_gravatar_url(email) + ".json",
                async: false,       
                type: 'GET',
                dataType: 'jsonp',
                crossDomain: true,
                success: function(data){
                    console.log('data = ' + gravatar_profile);
                    data_received = 1;
                },
                error: function() {
                    console.log('oh noes!');
                },
        });

ユーザーの電子メールが見つからない場合、コンソールに次のエラーが表示されます -

GET http://en.gravatar.com/79ac7efbf9deb9b7f7965d9aa564078b.json?callback=jQuery191009235964552499354_1373008918711 404 (Not Found)

ただし、エラー関数は呼び出されません。(誰かが理由を説明できますか?)ただし、ユーザーの電子メールが見つかった場合、成功関数が呼び出されます。

次の機能を使用して、jquery-jsonpも試しました-

$.jsonp({
            async: false,
            url: "http://www.gravatar.com/" + get_gravatar_url(email) + ".json",
            dataType: "jsonp",
            crossDomain: true,
            timeout: 5000,
            success: function(data){
                alert(data);
            },
            error: function(XHR, textStatus, errorThrown){
                alert("ERREUR: " + textStatus);
                //alert("ERREUR: " + errorThrown);
            },
        });

コンソールに 404 エラーが表示されたままですが、少なくともエラーが検出され、アラートが表示されます。しかし、gravatar が json 形式でデータを送信すると、新しいエラーが発生します -

Uncaught SyntaxError: Unexpected token :

誰でもこれを機能させる方法を教えてください。

4

1 に答える 1

0

ここでの参考のために、簡単な JSONP の例の手順を投稿しました。

 OTPrequest = function(){
    customerObj = {'data':'abc'}
    $.ajax({
      type:'GET',
      dataType: 'jsonp',
      data: customerObj,
      jsonpCallback: 'loadit',
      url: 'http://abc/retrieve',
      success: function (responseData) { //Your server responseData should be like this "loadit('otp sent')"
        loadit(responseData)
      },
      error: function(xhr, textStatus, errorThrown){
        //Error handler.
      }
    });
    function loadit(data){
      console.log(data);
      alert(data); //This will alert the popup as "opt sent".
    }
  }
于 2013-07-05T07:59:35.557 に答える