Sinatra ، JavaScript المتقاطع يطلب JSON
-
22-09-2019 - |
سؤال
أركض بقية api على قمة سيناترا. الآن أريد أن أكتب نص JQuery يجلب البيانات من API.
يُطلب من سيناترا الرد مع JSON
before do
content_type :json
end
طريق بسيط يشبه
get '/posts' do
Post.find.to_json
end
نصي jQuery الخاص بي هو Ajax-Call بسيط
$.ajax({
type: 'get',
url: 'http://api.com/posts',
dataType: 'json',
success: function(data) {
// do something
}
})
في الواقع ، كل شيء يعمل بشكل جيد طالما أن كلاهما يعمل على نفس IP و API وطلب JS. لقد حاولت بالفعل اللعب مع JSONP للحصول على رف دون أي نتائج إيجابية. ربما أحتاج فقط إلى تلميح كيفية المتابعة.
المحلول
يستخدم JSONP (JSON مع الحشو). هناك تمديد JSONP للرف.
في الأساس ، سوف تتصل:
$.ajax({
type: 'get',
url: 'http://api.com/posts',
dataType: 'jsonp',
success: function(data) {
// do something
}
})
الذي يترجم إلى طلب مثل:
http://api.com/posts?callback=someJSFunc
وسيستجيب الخادم الخاص بك ، على سبيل المثال:
someJSFunc({"json":"obj"});
بالطبع ، يمكن للعملاء القيام بطلبات JSONP بدون jQuery. الخدعة مع JSONP هي أنك تخدم البرامج النصية ، والتي يمكن أن تكون مجالات متقاطعة ، بدلاً من JSON النقي ، مع لا يمكن.
نصائح أخرى
شكرا على الإجابات حتى الآن. كنت على حق وسيحل JSONP المشكلة. قصاصات الكود لـ JavaScript تعمل بشكل جيد. لإعداد سيناترا أمر سهل للغاية لأنه يبني على أعلى الرف. لذلك ، ما عليك سوى تثبيت جوهرة الرف
gem install rack-rack-contrib --source=http://gems.github.com/
(أو ضعه في gemfile) وأضف
require 'rack/contrib/jsonp'
use Rack::JSONP
إلى طلبك.
يوفر هذا الوسيطة JSON العادية للعملاء غير JSONP و JSONP إلى JQuery & CO.
قد يكون من المثير للاهتمام بالنسبة لك http://github.com/shtirlic/sinatra-jsonp - هذا الامتداد يضيف وظائف مفقودة إلى سيناترا
متاح أيضًا كجوهرة gem install sinatra-jsonp
حاول أن تتصل
$.getJSON("http://example.com/?callback=?",function(data) { alert(data); });
في هذه العينة ، توجد الكلمة الرئيسية الرئيسية للبناء "Callback =؟" ، لذلك تحتاج إلى معالجة هذا المعلمة في البرنامج النصي من جانب الخادم الخاص بك ، وصنع JSONP صالح ، مثل هذا:
function({ "foo" : "bar" });
حيث تكون "الوظيفة" بيانات عشوائية ، والتي يتم إنشاؤها بواسطة jQuery تلقائيًا. اقرأ أكثر هنا حول jQuery و JSONP المتقاطع.