При вызове Ajax на другой сайт возвращается html вместо массива

0

Я пытаюсь получить массив, используя запрос .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 он возвращает Изображение 174551

весь вид 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
Теги:
arrays

1 ответ

1
Лучший ответ

В своем вызове 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",

  • 0
    это работает, но теперь это происходит: 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.
  • 0
    хорошо, я смог просто добавить before_action :authenticate_user!, :except => [:merchant_ids] и теперь он работает правильно, большое спасибо!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню