javascript
  • jquery
  • ajax
  • json
  • 2011-03-24 15 views 0 likes 
    0

    有効なJSON応答でコールバックを発射ません:jQueryのgetJSONは、次のようになり、私は(jsonlint.comによって検証される)有効なJSONオブジェクトを返しますサーバーを持っている

    "{\"encryption\": {\"key\": \"gKV0oPJwC5CBQxmn\"}}" 
    

    私のhtmlファイルは次のようになります。

    <html> 
        <head> 
        <title>Testing Jsonp</title> 
        <script type="text/javascript" src='jquery-1.4.4.js'></script> 
        <script type="text/javascript" src='app.js'></script> 
        </head> 
        <body> 
        <input type='text' value='thing' id='target' /> 
        <a href='' class='init'>Click</a> 
        </body> 
    </html> 
    

    app.js次のようになります。私はクロームネットワークコンソール "をクリックします" をクリックすると

    $(document).ready(function(){ 
        $('.init').click(function(event){ 
        $.getJSON("http://localhost:37280/sites/1/encode?callback=?", { key: $("#target").attr('value') }, function(data){ 
         alert('Success!'); 
        }); 
        event.preventDefault(); 
        }); 
    }); 
    

    要求が送信されたことを示し、サーバーログは要求が受信されたことを確認し、chromeは上記のjson文字列を受信したことを示します。しかし、何も起こりません。私は私のコールバックが実行されていないと信じさせるアラートを取得しません。どんな助けでも大歓迎です!

    +0

    実際に応答がJSONオブジェクトの引用符を戻していますか?彼らはそこにいるべきではありません。 – epascarello

    +0

    エラーハンドラを追加し、エラーハンドラの内容を確認します。 –

    +0

    私はサーバーに両方の方法で文字列を返すようにしましたが、コールバックの実行に違いはないようです。 – biagidp

    答えて

    3

    これは有効なJSONではありません。 JSONLintは、(新しく?)生の文字列が有効なJSONであると主張しているようです。本当じゃない。 JSONルートは常に配列またはオブジェクトでなければなりません。 RFC 4627は、こう述べています。また、

    "A JSON text is a serialized object or array."

    、あなたはJSONPを使っているので、あなたはあなたの応答に示されていないコールバックを含める必要があります。

    実際のURLがjsonp1234は、jQueryので選ばれた関数名であるhttp://localhost:37280/sites/1/encode?callback=jsonp1234

    であれば、応答がなければなりません:

    jsonp1234({"encryption": {"key": "gKV0oPJwC5CBQxmn"}}); 
    

    注これは、すべてのJSONPのように、実際にはJavaScriptであること。これがクロスドメインとなる方法です。

    +0

    私の間違いはコールバックを含まないことでした。本当にありがとう! – biagidp

     関連する問題

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