このコードを使用して、クロスドメインJSONP呼び出しを行っています。
jQuery.ajax({
async: true,
url: 'http://mnews.hostoi.com/test.json',
dataType: 'jsonp',
method: "GET",
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus + ': ' + errorThrown);
},
success: function (data, textStatus, jqXHR) {
if (data.Error || data.Response) {
exists = 0;
}
}
});
Firebugでデバッグすると、次のエラーが表示されます。
SyntaxError: missing ; before statement
ただし、jsonlint.comなどのツールを介してjsonオブジェクト(JQコードのリンクから入手可能)を渡すと、有効なJSONであると表示されます。そして、私も異常を見つけません。どのように構文エラーを返すのでしょうか?それは私が得ていないJSONPの詳細ですか?
{"news":[ {
"sentences": [
"Neuroscientists have discovered abnormal neural activity...",
"The researchers found that these mice showed many symptoms...",
"\"Therefore,\" the study authors say, \"our findings provide a novel.."
],
"summaryId": "ZJEmY5",
"title": "Abnormal neural activity linked to schizophrenia"
}]}
前もって感謝します。
JSONPはJSONではありません。 JSONP応答は、1つの引数(JSON構文に準拠するJavaScriptオブジェクトリテラル)を持つ関数呼び出し(定義済み関数への)のみを含むJavaScriptスクリプトで構成されます。
取得する応答はJSONPではなくJSONであるため、JSONPとして処理しようとすると失敗します。
変化する dataType: 'jsonp'
からdataType: 'json'
(または行を完全に削除すると、サーバーは正しいコンテンツタイプを発行するため、オーバーライドする必要はありません)。
スクリプトはJSONとは別のOriginで実行されているため、 ステップを取る (すべてではありませんが、JSONを提供するホストを制御する必要があります)を回避する必要もあります 同じオリジンポリシー 。
エラーは、JSONPではなくJSONを返すためです。
JSONPは次のようになります
someCallBackString({ The Object });
これが実際の例です
$.ajax({
type: 'GET',
url: 'http://xxx.amazonaws.com/file.json',
dataType: 'jsonp',
jsonpCallback: 'callback',
success: function(json){
console.log(json);
}
});
file.json
のようにcallback
を次のように配置する必要があります。
callback({"item":{".......
Epascarello 指摘 のように、JSONP応答は次のように送信する必要があります。
callBackFunction({ JSON Object })
そして、呼び出し元関数は次のように設定できます:
var url = "http://someremoteurl.com/json";
$.getJSON(url + "?callback=?", null, function(data) {
callBackFunction(data);
});
次に、応答データを次のようにループできます。
function callBackFunction(data)
{
console.log(data);
}
「callback =?」パラメーターを使用している場合、サーバー側の応答は次のようになります。
$_callback = $_GET['callback'];
echo $_callback . '(' . json_encode(YOUR_VARIABLE) . ');';
「callback =?」パラメータが定義されていない場合、応答は次のようになります。
echo '[' . json_encode($_return_array) . ']';
質問がRubyに関連している場合は、コントローラーで形式を正しくレンダリングするようにしてください。例:
def view_product
data = Product.find params[:id]
render :json => data, :callback => params[:callback]
end
レンダリングメソッドでは、:callbackパラメーターが必要です。そうでない場合、jsonpではなくjsonでレンダリングされます。