javascript
  • jquery
  • json
  • 2011-12-15 19 views 0 likes 
    0

    ここで何が間違っているのか分かりません。この

    [{1: "sdadd"}] 
    

    問題等

    $(function() { 
        $('#cars').change(function() { 
         var cars = $('#cars').val(); 
          $.getJSON('http://fooobar.com/data.php?id='+cars, function(data) { 
            alert('test'); 
         }); 
        }); 
    }); 
    

    要求http://fooobar.com/data.php?id=3に戻るJSON文字列は、そのコード

    alert('test'); 
    
    にある

    要求が正しいJSON文字列戻りdata.phpするときに実行されずに実行されますデータが返されないとき。

    私が見逃していますか?

    +3

    [同じ起源のポリシー](https://en.wikipedia.org/wiki/Same_origin_policy)が適用されます。外部ドメインからJSONを取得することはできません。それはJSONPでなければなりません。 –

    答えて

    1

    私はそれがSame Origin Policyだと思います。これは、別のドメインでAJAXを呼び出すWebページを停止します。

    +0

    が正しくありません。データはそこに返されますが、JSONPではなくJSON形式であるため、コールバック関数は呼び出されません。 – DhruvPathak

    +1

    それは同じ起源ポリシーになります –

    3
    [{1: "sdadd"}] 
    

    は正しいJSON文字列ではありません。オブジェクトにはkeysという番号を付けることはできません。これらのキーは数字で始めることはできません。

    jQuery.getJSON(url [, data] [, success(data, textStatus, jqXHR)]) 
    

    documentationによると::jQueryの1.4のよう

    、JSONファイルに構文エラーが含まれている場合、要求は通常、黙って失敗するjQueryのあなたのsuccessコールバックを実行していない理由です

    あなたは私が正しいかどうかを確認するためにこれを試すことができます。

    jQuery.getJSON(...).error(function() { alert("error"); }) 
    
    0

    クロスドメインデータ要求を行うときに間違った形式を使用しています。 JSONではなくJSONPデータを返す必要があります。 JSONPが動作するため 、あなたのURL:

    例えば、任意のコールバック関数名で呼び出されたときに、通常 { "result" : "some data" }

    を返し

    http://fooobar.com/data.php?id=3

    http://fooobar.com/data.php?id=3&callback=myJavascriptFunction 返す必要があります:myJavascriptFunction({ "result" : "some data" }) のみ、それJSONデータでコールバックのJavaScript関数を呼び出すことができます。

    例: JSONP形式をサポートしているFacebookのAPIにこれら2つのAPI呼び出しのアウトを参照してください。

    i)はJSON:

    https://graph.facebook.com/19292868552

    II)JSONP:

    https://graph.facebook.com/19292868552?callback=myFunctionName

    詳細はこちらhttp://api.jquery.com/jQuery.getJSON/

    0

    他の人が言っているのと同じ原産地規則が問題です。

    しかし、ここでは、彼らは言わなかったものだ - それを修正する方法:

    $.ajax({ 
        url: "someurl.com", 
        dataType: "jsonp", 
        data: {'some key':'somevalue', 'someotherkey':'val'}, 
        success: function(response) { alert(response); }, 
        error: function(jqXHR, textStatus, errorThrown) { 
         //do some error handling 
         alert(jqXHR); 
         alert(textStatus); 
         alert(errorThrown); 
        } 
    }); 
    

    をここに私は$.ajaxメソッドを使用しています - 基本的に$.getJSONdataType:'json'と、このためのラッパーです。

    注:これは完全にランダムになる「コールバック」と呼ばれるパラメータを渡すようにリクエストを変更します。すなわち

    あなたの要求は:

    someurl.com/?something=something&callback=123456 
    

    が返す必要があります。これは、サーバーによって処理され、関数名として渡される必要がある

    123456({ "key":"value"}); 
    

    そして、それは、あなたが取得できるようにする必要があります返されたデータは正常です。

    参考: JSONPとで使用できるさまざまなオプション$アヤックスはここにかなり良いです上のビット:http://en.wikipedia.org/wiki/JSONP#Padding

    編集: http://api.jquery.com/jQuery.ajax/

    ウィキペディアはここで大丈夫の記事があります。このようなリクエストを行い、エラー関数を使用すると、コンソールやアラートボックスにエラーがスローされるので、返されたJSONが有効かどうかを確認することができます。マークアップを編集して失敗時にアラートボックスをスローします。

     関連する問題

    • 関連する問題はありません^_^