2013-07-23 2 views
0

Я пытаюсь отправить строку JSON из PhoneGap в мое приложение Ruby. В PhoneGap, следующий код отправляет строку JSON:Parsing Ошибка JSON (от PhoneGap до Ruby)

  var location = { 
       lat: position.coords.latitude, 
       lng: position.coords.longitude 
      } 

      $.ajax({ 
       type: "post", 
       dataType: 'json', 
       data: location, 
       url: 'http://localhost:3000/location/new' 
      }); 

В моем приложении на Ruby У меня есть контроллер пытается обработать ответ:

def addlocation 

    require 'json' 
    json_string = params[:data] 

    parsed_json = JSON.parse(json_string.to_json) 

    if parsed_json["app"] == "Inrix PhoneGap" 
     new_obj = Location.new 
     new_obj.lat = parsed_json["lat"].to_f 
     new_obj.lng = parsed_json["lng"].to_f 
     new_obj.save 
    end 

end 

Я знаю, я получаю данные из PhoneGap, потому что параметры отображаются в журнале сервера. Я попытался преобразовать ответ в строку, а затем в json, потому что он, похоже, не в правильном формате json. Я также пробовал передать функцию JSON.parse response.body и params [: data]. Вот ошибка, которую я получаю в журнале сервера:

Started POST "/location/new" for 127.0.0.1 at 2013-07-23 01:14:37 -0700 
Processing by LocationsController#addlocation as HTML 
    Parameters: {"lat"=>"37.785834", "lng"=>"-122.406417"} 
Completed 500 Internal Server Error in 0ms 

JSON::ParserError (757: unexpected token at 'null'): 
    app/controllers/locations_controller.rb:12:in `addlocation' 


    Rendered /usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.1ms) 
    Rendered /usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.9ms) 
    Rendered /usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (7.5ms) 

Заранее спасибо. Дайте мне знать, если вам нужна дополнительная информация. Ура!

ответ

1

data в $.ajax не является именем параметра POST. Вы должны дать data: { data: location } для того, чтобы иметь параметр с именем data (который будет переводить POST data={"lat"=>"37.785834", "lng"=>"-122.406417"})

Однако, я хотел бы предложить вам назвать это что-то вроде location вместо: P

$.ajax({ 
    type: "post", 
    dataType: 'json', 
    data: { location: location }, 
    url: 'http://localhost:3000/location/new' 
}); 

и

location_json = params[:location] 

только чтобы вы поняли, что вы написали через полгода: D

+0

Doh! Думаю, это означает, что пришло время спать. Оказывается, мне даже не нужно было запускать функцию JSON.parse. Я мог бы просто сделать что-то вроде: 'params [: location] [: lat]' Спасибо за помощь! –