سؤال

أركض بقية 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 المتقاطع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top