2011-12-28 16 views
0

他の関連する質問がありますが、私の問題と完全に一致するものは見つかりませんでした。 $ .ajaxを使用してworldweatheronline.comからJSONを取得しようとしていて、空の応答が得られています。ただし、Fiddlerでは、毎回適切な応答を見ることができます。ブラウザでのみ、空であるようです(Firebugと警告文を使用して検索します)。 .ajaxメソッドを使用して、応答が利用可能なときにJSONを解析します。

以下は、コードスニペット、生のリクエストと生の応答です。

  var jsonxhr = $.ajax({ 
      url: 'http://free.worldweatheronline.com/feed/weather.ashx?q=55122&format=json&num_of_days=5&key=<somekey>', 
      type: 'GET', 
      dataType: 'jsonp', 
      success: function (json) { 
       alert('request success'); 
      }, 
      error: function (xhr, status) { 
       alert('request error'); 
      }, 
      complete: function (xhr, status) { 
       //alert('request complete'); 
       try { 
        var parsedJson = $.parseJSON(jsonxhr.responseText); 
        //alert('success parsing'); 
        alert('test' + jsonxhr.responseText + 'test'); 
        alert('headers ' + jsonxhr.getAllResponseHeaders()); 
        //alert(parsedJson.data.weather.tempMaxF.toString()); 
       } 
       catch (e) { 
        alert("error parsing"); 
       } 
      } 
     }); 

生要求

GET http://free.worldweatheronline.com/feed/weather.ashx?q=55122&format=json&num_of_days=5&key=somekey HTTP/1.1 受け入れ:/ を-言語を受け入れ: EN-USのAccept-エンコード:gzipで、 のUser-Agent収縮:Mozillaを/4.0(互換性、MSIE 7.0、Windows NT 6.1、Trident/5.0、SLCC2、.NET CLR 2.0.50727、.NET CLR 3.5.30729、.NET CLR 3.0.30729、Media Center PC 6.0、.NET4.0C。 NET4.0E; Tablet PC 2.0) 接続:K EEP-アライブ ホスト:free.worldweatheronline.com

生の応答

HTTP/1.1 200 OK のCache-Control:プライベート のContent-Type:アプリケーション/ JSON。文字セット= UTF-8 サーバー:マイクロソフト-IIS/7.5 X-ASPNET-バージョン:2.0.50727 X-Poweredのバイ:ASP.NET 日:水曜日、2011年12月28日午前4時20分46秒GMT たContent長さ:2712

{"現在の条件": "{" cloudcover ":" 100 "、"湿度 ":" 50 "、" observation_time ":" 03:50 AM "、" precipMM " "temp"、 "temp_F": "26"、 "visibility": "16"、 "weatherCode": "122"、 "weatherDesc":[ {"値": "曇り"}、 "weatherIconUrl":[{"値": "http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0004_black_low_cloud.png"}]、 "winddir16Point": "N" windfeedKmph ":" 11 "、" windspeedMiles ":" 7 "}]、"要求 ":[{"クエリ ":" 55122 "、"タイプ ":"郵便番号 "}]、" winddirDegree " 、 "weather":[{"date": "2011- tempMinF ":" 2 "、" tempMaxF ":" 35 "、" tempMinC ":" -4 "、" tempMinF ":" 24 "、" weatherCode ":" tempMaxF " "weatherIconUrl":[{"value": "http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0001_sunny.png"} "113"、 "weatherDesc":[{"value": "Sunny"}] ]、 "winddir16Point": "NNW"、 "winddirDegree": "343"、 "winddirection": "NNW"、 "windspeedKmph": "28"、 "windspeedMiles": "18"}、{"date": "2011 tempMinF ":" 36 "、" tempMinC ":" -6 "、" tempMinF ":" 22 "、" weatherCode " : "weather"、 "weather"、 "weather"、 "weather" } "、" winddir16Point ":" SW "、" winddirDegree ":" 220 "、" winddirection ":" SW "、" windspeedKmph ":" 17 "、" windspeedMiles ":" 11 "}、{" date " 「tempMaxF」:「tempMaxF」:「39」「tempMinC」:「-1」「tempMinF」:「30」「weatherCode ":" 116 "、" weatherDesc ":[{"値 ":"曇り "}]、" w 「winddir16Point」:「WSW」、「winddirDegree」:「257」、「winddirection」、「winddir16Point」、「winddir16Point」、「winddir16Point」、「winddirDefault」: "tempMaxC": "1"、 "windspeedMm": "20"、 "windspeedMiles": "13"}、{"date": "2011-12-30"、 "precipMM": "0.3" 、 "tempMaxF": "35"、 "tempMinC": "-1"、 "tempMinF": "30"、 "weatherCode": "119"、 "weatherDesc":[{"value": "Cloudy"}] "weatherIconUrl":[{"value": "http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0003_white_cloud.png"} "、" winddir16Point ":" SW "、" winddirDegree ":" 228 "、" winddirection "" SW "、" windspeedKmph ":" 18 "、" windspeedMiles ":" 11 "}、{" date ":" 2011-12-31 "、" precipMM ":" 0。tempMinF ":" 32 "、" weatherCode ":" 122 "、" weatherDesc ":[{" tempMaxF " winddir16Point」:「W」、「W」、「W」、「W」、「W」、「W」、「W: "windspeedKmph": "21"、 "windspeedMiles": "13"}]}}

答えて

2

私は問題はjsonpは本当にAJAXではないと信じています。このため、xhrオブジェクトには実際のAJAX呼び出しで期待されるすべてのものがありません。代わりにsuccessコールバックに渡されるデータを使用してください。

+2

私は同意します。成功したコールバックには解析されたjsonが含まれているので、 '$ .parseJSON()'を使うようにしました。 –

+0

ありがとう、それはそれを修正し、私は解析することができました。私はあなたが "jsonp"が本当にAJAXではないことを意味していましたが、@ James Montagneは理解できませんでした。私はjsonpもAJAXだと思っていますが、ドメイン間の呼び出しに使用されています...今はなぜか分かりませんが、私の要求は 'jsonp'のようなデータ型を持っていて、 'json'この上の光は非常に高く評価されます。 – strider

+0

http://en.wikipedia.org/wiki/JSONPを読んでください。 JSONPはスクリプトを使用して、AJAXがクロスドメイン・コールを行うことができないという事実を回避します。 AJAXでXが見つからない、XMLが関係していない。 XMLHttpRequestは使用されません。 –