1

HTML5、jQuery モバイル アプリケーションを開発しています。データを取得するには、サードパーティの JSON Web サービスを使用する必要があります。ただし、jquery 関数で parseerror が発生しています。問題は、Web サービスが JSON を送信することです。クロスドメインであるため、JSONP を使用する必要があります。とにかくjQueryまたはjavascriptを使用してこれを行うことはありますか? これが私が使用しているコードです。

$.ajax({
            url : jsonServiceURL + "scheduleService/retrieveMySchedules.json?callback=?",
            dataType : "json",
             beforeSend: function(x) {
              if(x && x.overrideMimeType) {
               x.overrideMimeType("application/json;charset=UTF-8");
              }
             },
            timeout : 5000
        }).success(function() {
                alert('pass');      
        }).error(function(httpObj, textStatus) {        
            alert(textStatus);
        }); 

リクエストは行きます。返事も来る。しかし、それはparseerrorと言っています。これはJSONとJSONPで何か違いがあると思います。URL をhttp://www.geonames.org/postalCodeLookupJSON?postalcode=10504&country=US&callback=のようなものに設定すると? 私のコードは問題なく動作します。すべてのiPhoneアプリが正常に動作するため、サードパーティのWebサービスも正しい. 私が見る唯一の違いは、JSON の先頭[{と JSONP の先頭somefunction({です。

JSON は有効です。いくつかのオンライン ツールで確認したところ、その Web サービスで問題なく動作する iPhone アプリがいくつかあります。JSONPの代わりにJSONを送信するため、jqueryで解析できないようです。私の考えが間違っている場合は修正してください。これに対する可能な解決策は何ですか?

4

1 に答える 1

1

クロスドメイン リクエストを行う場合は、jsonp を使用します。それは良い。標準の json リクエスト (XmlHttpRequest で実行) とは少し異なります。

jsonp の正確なリクエストを送信する必要があります。

$.ajax({
       url : jsonpServiceURL + "scheduleService/retrieveMySchedulesJsonp?callback=?",
       dataType : "jsonp"           
 });

そして、コールバックになる関数をコードに含める必要があります。

function InBrowser_receive(answer) {
        console.log('received:', answer)
    // do things with answer (the received json)
}

個人的には、サーバー部分も書くので、通常はコールバックの名前をサーバーに送信することを気にしません。コールバック名をサーバーごとにハードコーディングするだけです。

また、json 構造を使用してサーバーに引数を送信することも好きです。したがって、リクエストを送信する私の関数は通常次のようになります。

function sendToServer(message) {
    $.ajax(
        {
            url: serverUrl,
            data: 'theQuery=' + JSON.stringify(message),
            crossDomain: true,
            dataType: 'jsonp'
        }
    );
} 

これが私のオープン ソース コードの 1 つの例です: https://github.com/Canop/braldop/blob/master/chrome/braldop/inext_com.js

送信機能は

braldop.sendToBraldopServer

そして受信者は

receiveFromMapServer
于 2012-04-25T06:31:55.610 に答える