1

次のコード スニペットを検討してください。

$(function () {
     $.ajax({
        type: "GET",
        url: "http://mosaicco.force.com/siteforce/activeretailaccounts",
        dataType: "jsonp",
        crossDomain: true,
        jsonp: "callback",
        error: function(jqXHR, textStatus, errorThrown) {   
            alert('Error Message: '+textStatus);
            alert('HTTP Error: '+errorThrown);
            },
        success: function (data) {
                var i = 0;
                       //Process JSON
                       $.each(data, function () {
                             var name = this.locname;
                             var lat = this.lat;
                             var lng = this.lng;
                             var address = this.address;
                             var address2 = this.address2;
                             var city = this.city;
                             var state = this.state;
                             var postal = this.postal;
                             var phone = this.phone;
                             var web = this.web;
                             web = web.replace("http://", "");

                             var distance = GeoCodeCalc.CalcDistance(orig_lat, orig_lng, lat, lng, GeoCodeCalc.EarthRadiusInMiles);

                             //Create the array
                             locationset[i] = new Array(distance, name, lat, lng, address, address2, city, state, postal, phone, web);

                             i++;
                      });
                  }
        });
 });​

JSON クロス ドメインをプルしていますが、何らかの理由で parseerror が返され続けます。

HTTP Error:Error: jQuery17209875996995251626_1343943259805 was not called

ページ上でデータを正常に表示できます。コールバックは次のようになります。

callback:jQuery17209875996995251626_1343943259805_:1343943260015

私が欠けているものを診断するのを手伝ってください - ありがとう!

4

1 に答える 1

4
var data = $.parseJSON(data);

JSONP リクエストを実行しているため、オブジェクト リテラルがコールバック関数に渡されます。その上では使えませんparseJSON。とにかく、jQuery はインテリジェントであり、コンテンツ タイプがわかっている場合は常に解析を行います。

それがエラーメッセージをトリガーするかどうかはわかりませんが、jQuery JSON 応答が常に ParseError をトリガーするという質問に対して、これが解決策でした。


わかりました、それは簡単です。読み込まれるスクリプトを見てください。これは有効な JSONPではありません。コールバックのパディングがありません。また、MIME タイプが間違っています。JSONP スクリプトの場合はtext/javascriptorapplication/javascriptである必要があり、配信される JSON の場合は である必要がありますapplication/json

jQueryは「スクリプト」のロードを検出しますが、何も実行されないため、「ファイルは正常にロードされましたが、指定されたコールバックは呼び出されませんでした」というエラーがスローされます-parseerrorが疑われます。

Web サービスが JSONP を完全にサポートしていると確信していますか?

于 2012-08-03T15:12:11.253 に答える