2013-01-19 19 views
5

getJSONメソッドを使用してjQueryで作成したカスタムJSONフィードを取得しようとしています。未知の理由でURLの末尾にあるcache_gen.php?location=PL4が削除され、[object%20Object]に置き換えられ、404エラーが発生します。jQueryで[object%20Object]が追加されたJSONリクエスト

ここで私が使用しているjQueryの:

var fetchData = function() { 

    if (Modernizr.localstorage) { 

     var api_location = "http://weatherapp.dev/cache_gen.php"; 
     var user_location = "PL4"; 
     var date = new Date(); 

     console.log(api_location + '?location=' + user_location); 

     jQuery.getJSON({ 
      type: "GET", 
      url: api_location + '?location=' + user_location, 
      dataType: "json", 
      success: function(jsonData) { 
       console.log(jsonData); 
      } 
     }); 

    } else { 
     alert('Your browser is not yet supported. Please upgrade to either Google Chrome or Safari.'); 
    } 
} 

fetchData(); 

をコンソールログから私は、URL文字列として正しく計算されて見ることができます。コンソールの2行目があるしかしhttp://weatherapp.dev/cache_gen.php?location=PL4

Failed to load resource: the server responded with a status of 404 (Not Found)を。

誰も私にこれを正しい方向に向けることができますか? 19/01/2013 23:15

は、まあ、私はちょうどそれがあるので、変換しまし

UPDATEは完全$.ajaxを使用してドキュメントをフィット。また、失敗イベントを追加し、渡されたすべてのデータを記録しました。

var fetchData = function() { 

    if (Modernizr.localstorage) { 

     var api_location = "http://weatherapp.dev/cache_gen.php"; 
     var user_location = "PL4"; 
     var date = new Date(); 

     var url = api_location + '?location=' + user_location; 

     console.log(url); 

     jQuery.ajax({ 
      type: "GET", 
      url: api_location + '?location=' + user_location, 
      dataType: "json", 
      success: function(jsonData) { 

       console.log(jsonData); 
      }, 
      error: function(jqXHR, textStatus, errorThrown) { 
       console.log('textStatus: ' + textStatus); 
       console.log('errorThrown: ' + errorThrown); 
       console.log('jqXHR' + jqXHR); 
      } 
     }); 

    } else { 
     alert('Your browser is not yet supported. Please upgrade to either Google Chrome or Safari.'); 
    } 
} 

fetchData(); 

この後、私のコンソールは私に次の情報を提供します:

http://weatherapp.dev/cache_gen.php?location=PL4 
download_api.js:44textStatus: parsererror 
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string 
download_api.js:46jqXHR[object Object] 

私はJSONフィードのヘッダーが最新で確保している、と飼料は間違いなく(それが効果的に第三をキャッシュに有効なJSONにサービスを提供していますAPIのコストを節約するためにサードパーティのサービスフィードを使用しています)。

+0

http://weatherapp.dev/cache_gen.php?location=PL4は有効なURLではありません。<-----それをクリックしてください。 – Popnoodles

+0

@popnoodles、それは '/ etc/hosts'リダイレクト:)かもしれません。しかし、確かに '.dev'は怪しいと聞きます。 – Alexander

+0

.devは開発ドメインです。これは私のローカルシステム上にApache仮想ホストを持っています。私の '' '/ etc/hosts''にエントリがあり、それが正しく解決されていることを確認しています。 JSファイルがロードされているドメインと同じドメインのブラウザでこのドメインにアクセスできます。 –

答えて

5

このエラーが表示さ理由:あなたのJSONが無効なので

http://weatherapp.dev/cache_gen.php?location=PL4 
download_api.js:44textStatus: parsererror 
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string 
download_api.js:46jqXHR[object Object] 

です。応答がサーバーから正しく戻ってきても、dataTypeが 'json'で、返された応答の形式がJSONでない場合、jQueryはerror関数のパラメータを実行します。

http://jsonlint.comは、JSON文字列の正当性を確認するための非常に簡単な方法です。

+0

もう一度アダムに感謝します。 –

+0

@アダムの良い答えを広げる。より一般的には、コールの「データ型」値(明示的または暗黙的)とサーバーから返される実際のデータとの間に何か不一致があります。私は自分のデータ型として "html"を指定していましたが、このエラーが発生しました。オプションのdatatypeパラメータが省略され、エラーが表示されなくなりました。私は間違いなくhtmlを返してページに挿入していますが、Ajaxの女神に腰を下ろして、私の戻り値が私の呼び出しが働いている限り、彼女が望むどのタイプであろうと思うようにします。 –

0

実際の関数の使用チェックアウト:あなたは$.ajaxと同じよう$.getJSONにオブジェクトのパラメータに渡すことはできません

http://api.jquery.com/jQuery.getJSON/

を、あなたのコードは次のようになります。

jQuery.getJSON('api_location + '?location=' + user_location) 
     .done(function() { 
      //success here 
     }) 
     .fail(function() { 
      //fail here 
     }); 

多分に$.getJSONはちょうど$.ajax{type:'get',dataType:'JSON'}と呼び出す「ラッパー関数」にすぎません。上記のリンクでこれを見ることができます。

+0

OPの代わりに.getJSONを.ajax – Popnoodles

+0

@popnoodlesと置き換えるのはなぜですか? OPは '$ .getJSON'に既に含まれていないオプションを使用していません。 – charlietfl

+1

@charlietfl彼らはコードを記述しているので、.ajaxを使用していたはずです。 – Popnoodles

0

今日は同じ問題が発生していました。私の場合は、JSONオブジェクトを 'location'という名前の変数に割り当てていました。これはJavaScript under Windowsの予約語で、見た目はwindows.locationの省略形です!したがって、ブラウザは[object%20Object]を付けて現在のURLにリダイレクトしました。同じことが起こった場合は、単純に 'location'以外の変数名を使用してください。これが誰かを助けることを望みます。

関連する問題