1

json形式のデータを返すAPIにリクエストを送信する必要があります。このAPIは、このスクリプトが実行されるドメインのサブドメインにあります(ただし、現時点では、dev、localhostのまったく異なるドメインにあります)

どういうわけか、jsonpがこの動作を可能にするはずだと思ったのですが、何が欠けていますか?

jQuery1.4.2の使用

$.ajax({
    url:'http://another.example.com/returnsJSON.php',
    data: data,
    dataType:'jsonp',
    type: "POST",
    error: function(r,error) {
        console.log(r);
        console.log(error);
    },
    success:function(r){
    console.log(r);
    }
});
4

3 に答える 3

3

タイプを「POST」から「GET」に変更します。つまり、データを取得する場合のみです。

于 2010-05-21T18:02:06.820 に答える
2

Arnaudの回答(POSTを使用しない)とR. Bemroseの回答(サーバー側がJSONPを返すことを確認してください)の組み合わせに、コールバック関数の仕様を追加する必要があります。

つまり、変更されたリクエストコードは次のとおりです。

function dosomething(data) {
    console.log(data);
}

$.ajax({
    url: 'http://another.example.com/returnsJSON.php',
    data: data,
    dataType: 'jsonp'
});

生成されたコードでは、dataTypeが "jsonp"の場合、jQueryがURLを指すスクリプトタグを出力することがわかります。これは典型的なXHRではありません。ここでjQueryのgetJSON()を使用することもできます。

次に、応答を次のようにフォーマットする必要があります。

dosomething({
    test: 'foo'
});

呼び出しが完了すると、指定したコールバックが起動します。

于 2010-05-21T18:49:01.807 に答える
1

JSONPを使用するようにサーバー側コンポーネントを変更しましたか?

クライアントにJSONPを使用するように指示し、サーバー側のJSONスクリプトが正しい結果を返すことを突然期待することはできません。

具体的には、JSONPは、サーバーが特定の関数(その名前は他の引数とともに渡される)を呼び出すJavaScript文字列を返すように要求し、その結果をクライアントが返しますeval

于 2010-05-21T18:20:05.730 に答える