Я пытаюсь получить массив, используя запрос .ajax
GET для URL.
Здесь мой контроллер, размещенный локально на localhost:3000
def merchant_ids
merchants = Merchant.where(id: params[:id]).pluck(:merchant_name, :id, :merchant_city, :physical_address, :merchant_phone, :latitude, :longitude)
render json: merchants
end
Если я сделаю запрос следующим образом:
$.ajax('http://localhost:3000/dashboard/merchants/merchant_ids/1').done(function(data) { console.log(data); });
он регистрирует массив просто отлично.
Но если я попытаюсь сделать то же самое из другого приложения, используя localhost:3001
он возвращает
весь вид html вместо массива.
что я делаю неправильно здесь?
У меня есть gem 'rack-cors'
и config:
config.middleware.insert_before ActionDispatch::Static, Rack::Cors do
allow do
origins '*'
resource '/*', :headers => :any, :methods => [:get, :post]
end
end
В своем вызове Ajax попробуйте помещать ContentType и dataType в json
попробуйте this-
$.ajax({
url:"http://localhost:3000/dashboard/merchants/merchant_ids/1",
contentType: "application/json; charset=utf-8",
dataType: "json"
}).done(function(data) { console.log(data); });
Поскольку вы пытаетесь получить доступ к данным json при обратном вызове, вам необходимо указать тип данных возвращаемых данных. Также укажите это вместе с вашим запросом ajax.
dataType: "json",
XMLHttpRequest cannot load http://localhost:3000/dashboard/merchants/merchant_ids/1. The request was redirected to 'http://localhost:3000/users/sign_in', which is disallowed for cross-origin requests that require preflight.
before_action :authenticate_user!, :except => [:merchant_ids]
и теперь он работает правильно, большое спасибо!