2013-09-18 3 views
0

Это убивает меня. Попытка загрузить данные из другого домена из типов API, которые я пытаюсь написать. При передаче параметров в формате JSON, как POST они получают отбрасываются, я где-то читал, что некоторые специальные заголовки должны быть установлены before_filter:Междоменная JQuery JSONP POST to Rails app

def cors_headers #set_access_control_headers 
    headers['Access-Control-Allow-Origin'] = '*' 
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' 
    headers['Access-Control-Max-Age'] = "1728000" 
    headers['Access-Control-Allow-Headers'] = 'content-type, accept' 
    end 

Не везло с этим же. Угадайте, что это ограничение браузера.

При попытке отправки данных в качестве GET вместо POST, он добавляется к URL, как это:

Completed in 959ms (View: 0, DB: 2) | 200 OK [http://www.somedomain.com/connector/browse/Sport.json?callback=jQuery16105855946165975183_1379526705493&{%22filters%22:[{%22filter%22:{%22attribute%22:%22id%22,%22op 
erator%22:%22%3E%22,%22value%22:%222%22}},{%22filter%22:{%22attribute%22:%22id%22,%22operator%22:%22%3C%22,%22value%22:%227523%22}}]}&_=1379526723982] 

Так Rails в принципе может не увидеть фильтры, которые являются Params, что я пытаюсь отправить

Parameters: {"{\"filters\":"=>{}, "id"=>"Sport", "_"=>"1379526723982", "callback"=>"jQuery16105855946165975183_1379526705493"} 

JQuery сниппет Я играю с это:

 $jq.ajax({url: "http://www.somedomain.com/connector/browse/" + x + ".json" + "?callback=?", 
      type: "get", // tried post too 
      dataType: "json", // tried jsonp too 
      accepts: "json", 
      data: req_data, // this is JSON.stringified already 
      processData:false, 
      contentType: "application/json; charset=UTF-8;", 
      success: output 
     }); 

Выборочные данные Я т чтобы отправить это

{"filters":[{"filter":{"attribute":"id","operator":">","value":"2"}},{"filter":{"attribute":"id","operator":"<","value":"7523"}}]} 

У кого-нибудь есть идея, как разобраться в этом?

Muchos gracias!

+0

Позже изменения: заголовки действительно добавляются в ответ

+0

Позже отредактируйте 2 - после прочтения вокруг кажется, что запрос POST не должен работать с JSONP, однако, глядя на файл журнала, параметры JSON действительно публикуются, а рельсы читают их просто отлично? Просто выход не достигает клиента (браузера). Разумеется, возможно, чтобы временно сохранить выход на стороне удаленного сервера, а затем выполнить второй вызов GET для извлечения вывода предыдущего вызова JSONP. Мысли? –

ответ

-1

В основном JS SOP позволяет нам отправлять запрос POST и читает ответ, но это можно обойти так:

1) Составьте данные запроса, отправить его как POST. Не ожидайте получить ответ. Не используйте на успех, используйте вместо этого. Добавьте переменную random-ish в запрос

2) Временно сохраняйте ответ на стороне сервера в файле или переменной сеанса или сервере memcached, используйте случайный var, упомянутый выше как ключ в хранилище.

3) отправить второй вызов JSON AJAX для извлечения кэшированного объекта.

С memcached убедитесь, что кешированные ответы время от времени удаляются или истекают, в моем случае приложение получает много трафика, оно будет спамить мои серверы memcache с нежелательным файлом, если не установлен срок его действия.

here's some sample code