Rack-JSONP لا يعملان لطلبات بسيطة ولكن يعمل من أجل مكالمات .JS في القضبان 2.3

StackOverflow https://stackoverflow.com/questions/1133244

  •  16-09-2019
  •  | 
  •  

سؤال

أنا أستخدم القضبان 2.3 وقررت تقديم الدعم ل JSONP. أنشأ تطبيق جديد جديد. ثم ركض البرنامج النصي / إنشاء اسم المستخدم سقالة: سلسلة

هذه بيئتي بأكملها

RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION
require File.join(File.dirname(__FILE__), 'boot')
require 'rack/contrib'
Rails::Initializer.run do |config|
 config.middleware.use 'Rack::JSONP'
end

عندما أقوم بزيارة LocalHost: 3000 / المستخدمون كل ما أحصل عليه هو التجزئة. عندما أقوم بزيارة localhost: 3000 / users.js؟ رد الاتصال = إظهار ثم أحصل على نتيجة جيدة.

دعونا ننظر إلى كود JSONP وبعد أنا لا أفهم لماذا يتم لف الاستجابة في صفيف.

لقد أنشأت رفوف رف آخر حيث استبدلت هذا البيان

      [status, headers, [response]]

مع هذا البيان

      [status, headers, response]

والآن كل شيء يعمل بشكل جيد.

أنا أرفض الاعتقاد بأن هذا خطأ في الرف المساهمة.

هل يمكن لأي شخص أن ينقلني لماذا يتم لف الاستجابة في صفيف وكيف يمكنني استخدام Rack-Contriby في طلبي.

شفرة المصدر الكامل للتطبيق الخاص بي هنا. وبعد فقط استنساخها وتشغيلها على localhost: 3000.

هل كانت مفيدة؟

المحلول

هذا الكود خاطئ. إليك ما يجب أن يكون:

def call(env)
  status, headers, response = @app.call(env)
  request = Rack::Request.new(env)
  if request.params.include?('callback')
    response = [pad(request.params.delete('callback'), response)]
    headers['Content-Length'] = response.length.to_s
  end
  [status, headers, response]
end

تم التغليف بشكل غير صحيح الاستجابة في صفيف في الحالة حيث لا تتضمن المعارف رد اتصال. السبب في أنه يحتاج إلى لف الاستجابة في صفيف في الحالة حيث تتضمن المعارف رد اتصال لأن ردود الرف يجب أن تستجيب ل. كل ().

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