คุณอยากรู้อะไรกันแน่? ActiveRecord มีวิธีการที่ทำให้ลำดับของระเบียนเป็น JSON ตัวอย่างเช่นเปิดคอนโซลรางของคุณแล้วเข้าไปModelName.all.to_json
และคุณจะเห็นเอาต์พุต JSON render :json
โดยพื้นฐานแล้วจะเรียกto_json
และส่งคืนผลลัพธ์ไปยังเบราว์เซอร์ด้วยส่วนหัวที่ถูกต้อง สิ่งนี้มีประโยชน์สำหรับการเรียก AJAX ใน JavaScript ซึ่งคุณต้องการส่งคืนอ็อบเจ็กต์ JavaScript เพื่อใช้ นอกจากนี้คุณสามารถใช้callback
ตัวเลือกเพื่อระบุชื่อของการโทรกลับที่คุณต้องการโทรผ่าน JSONP
ตัวอย่างเช่นสมมติว่าเรามีUser
โมเดลที่มีลักษณะดังนี้:{name: 'Max', email:' m@m.com'}
นอกจากนี้เรายังมีคอนโทรลเลอร์ที่มีลักษณะดังนี้:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
ตอนนี้ถ้าเราทำการโทร AJAX โดยใช้ jQuery ดังนี้:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
อย่างที่คุณเห็นเราจัดการเพื่อรับผู้ใช้ที่มี id 5 จากแอปทางรถไฟของเราและใช้ในโค้ด JavaScript ของเราเนื่องจากส่งคืนเป็นวัตถุ JSON ตัวเลือกการเรียกกลับเพียงแค่เรียกใช้ฟังก์ชัน JavaScript ของชื่อที่ส่งผ่านด้วยออบเจ็กต์ JSON เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว
เพื่อเป็นตัวอย่างของcallback
ตัวเลือกโปรดดูสิ่งต่อไปนี้:
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);
โดยทั่วไปแรงจูงใจในการใช้การโทรกลับดังกล่าวคือการหลีกเลี่ยงการป้องกันเบราว์เซอร์ที่ จำกัด การแชร์ทรัพยากรข้ามแหล่งที่มา (CORS) อย่างไรก็ตาม JSONP ไม่ได้ใช้มากนักอีกต่อไปเนื่องจากมีเทคนิคอื่น ๆ สำหรับการหลีกเลี่ยง CORS ที่ปลอดภัยและง่ายกว่า