2012-04-25 18 views
1

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

$.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=のように設定するとどうなりますか?私のコードは正常に動作しますが、問題はありません。サードパーティのWebサービスも、すべてのiphoneアプリがうまく動作するので正解です。 JSONは[{で始まり、JSONPはsomefunction({で始まります。

JSONが有効です。私はいくつかのオンラインツールでそれをチェックし、問題なしでそのWebサービスと連携しているいくつかのiphoneアプリもあります。 JSONPの代わりにJSONを送信するので、jqueryで解析できないようです。私の考えが間違っているなら、私を修正してください。これにはどのような解決策がありますか?

答えて

1

クロスドメインリクエストを行っている場合は、jsonpを使用してください。それは良い。これは、標準のjsonリクエスト(XmlHttpRequestで行われたもの)とちょっと違います。

あなたはそれがJSONPだprecisingリクエストを送信する必要があります:

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

そして、あなたがコールバックされますあなたのコード内の関数れている必要があります。個人的に

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

を、私は通常ありません私はサーバー部分も書いているので、コールバックの名前をサーバーに送信することに気をつけます。コールバック名をserverwiseで単純にハードコードします。

私はjson構造を使ってサーバーに引数を送るのが好きです。だから、要求を送信し、私の機能は次のように通常である:

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

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

送信機能が

braldop.sendToBraldopServer 

と受信ですは

receiveFromMapServer 
+0

ありがとうございます。しかし、応答はJSONPにはないので動作しませんでした。私はそれが第三者であるのでコールバックを指定しなければならない。 –

+0

あなたが正確にコールバックするなら、それはjsonpにあります。または私は何かが欠けている。 –

+0

はい。問題は、JSONPではなくJSONのみを提供するWebサービスです。ありがとう。 –

関連する問題