class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
现在我们可以创建一个 JSONP 请求,如下所示:
function testFunction(data) {
alert(data.name); // Will alert Max
};
var script = document.createElement("script");
script.src = "/users/5";
document.getElementsByTagName("head")[0].appendChild(script);
The motivation for using such a callback is typically to circumvent the browser protections that limit cross origin resource sharing (CORS). JSONP isn't used that much anymore, however, because other techniques exist for circumventing CORS that are safer and easier.
JSONP (第二个例子)是绕过 同一原产地政策的一种方法,同一原产地政策是每个浏览器内置安全的一部分。如果你有你的 API 在 api.yoursite.com和你将服务你的应用程序离开 services.yoursite.com你的 JavaScript 将不能(默认情况下)使 XMLHttpRequest(XHR-aka ajax)请求从 services到 api。人们绕过这个限制(在 跨来源资源共享规格已经敲定之前)的方法是从服务器 as if it was JavaScript instead of JSON发送 JSON 数据。因此,与其退回: