Submitting POST form data from a Titanium Mobile App to a Ruby on Rails Web App -


i'm trying submit form data titanium mobile app ruby on rails web app. post multipart request includes basic data , image.

i show different ways i've tried submit data, , errors ror log.

some details:

  • the image problem[avatar] comes phone camera.
  • the following code common snippets below. comes before snippets.

common code

var url = "http://some_ror_app.herokuapp.com/problems"; var client = ti.network.createhttpclient({     // function called when response data available     onload : function(e) {         alert('success');     },     // function called when error occurs, including timeout     onerror : function(e) {         alert('error');     },     timeout : 60 * 1000 }); 

way #1

titanium

i have saved form data inside variable, , passed on variable send() function.

var params = {     'problem[avatar]': $.report_image_view.reportphoto.toimage(), // returns [ti.blob] object     'problem[title]': $.report_title_view.title.value,     'problem[description]': $.report_description_view.description.value,     'problem[ptype]': $.report_type_view.report_type.value['valueid'],     'problem[status]': 1,     'problem[priority]': 2,     'problem[latitude]': latitude,     'problem[longitude]': longitude,     'problem[user_id]': 2 }  // prepare connection. client.open("post", url); client.send(params);         

ror log

013-09-04t18:30:54.048412+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 18:30:54 +0000 2013-09-04t18:30:54.248656+00:00 app[web.1]: processing problemscontroller#create multipart_form 2013-09-04t18:30:54.248656+00:00 app[web.1]: [paperclip] saving attachments. 2013-09-04t18:30:54.248656+00:00 app[web.1]: redirected https://km7.herokuapp.com/problems/32 2013-09-04t18:30:54.248656+00:00 app[web.1]: completed 302 found in 194ms (activerecord: 80.2ms) 2013-09-04t18:30:54.252433+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=208ms status=302 bytes=103 2013-09-04t18:30:55.157538+00:00 app[web.1]: started post "/problems/32" 111.222.333.444 @ 2013-09-04 18:30:55 +0000 

result

the post done, not intended. new record added database, empty. in other words, image not uploaded, title empty, , description, coordinates, , else. timestamp , (object) id set.


way #2

titanium

what have done is, instead of saving form data inside variable, , passing on variable, i've created object form data parameter pass function.

client.open("post", url); client.send({     "problem[avatar]" : $.report_image_view.reportphoto.toimage(), // returns [ti.blob] object     "problem[title]" : $.report_title_view.title.value,     "problem[description]" : $.report_description_view.description.value,     "problem[ptype]" : $.report_type_view.report_type["valueid"],     "problem[status]" : 1,     "problem[priority]" : 2,     "problem[latitude]" : latitude,     "problem[longitude]" : longitude,     "problem[user_id]" : 2 });  

ror log

2013-09-04t18:48:48.328758+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 18:48:48 +0000 2013-09-04t18:48:48.635395+00:00 app[web.1]: processing problemscontroller#create multipart_form 2013-09-04t18:48:48.635395+00:00 app[web.1]: [paperclip] saving attachments. 2013-09-04t18:48:48.635395+00:00 app[web.1]: redirected https://km7.herokuapp.com/problems/34 2013-09-04t18:48:48.635395+00:00 app[web.1]: completed 302 found in 299ms (activerecord: 66.1ms) 2013-09-04t18:48:48.644302+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=325ms status=302 bytes=103 

result

exactly before. post done, not intended. new record added database, empty.


way #3

titanium

this time passing string parameters passed if get. however, cannot pass image in way...or can i?

var post_data =  "problem[title]=report rest client&problem[latitude]=18.09&problem[longitude]=-67.12&problem[ptype]=1&problem[status]=1&problem[priority]=2&problem[description]=test description rest client&problem[user_id]=2&problem[address]=123 main street, pr";  // prepare connection. client.open("post", url);            client.send(post_data);   

ror log

i don't know why keeps redirecting me /problems on , on until gives up.

2013-09-04t19:03:30.982008+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=10ms status=307 bytes=0 2013-09-04t19:03:36.415999+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:36 +0000 2013-09-04t19:03:36.475568+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=1ms service=64ms status=302 bytes=100 2013-09-04t19:03:36.476626+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:36.476626+00:00 app[web.1]:   parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:36.476626+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:36.476626+00:00 app[web.1]: completed 302 found in 54ms (activerecord: 26.1ms) 2013-09-04t19:03:37.428602+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:37 +0000 2013-09-04t19:03:37.532547+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:37.532547+00:00 app[web.1]:   parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:37.532547+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:37.532547+00:00 app[web.1]: completed 302 found in 92ms (activerecord: 61.0ms) 2013-09-04t19:03:38.457108+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=84ms status=302 bytes=100 2013-09-04t19:03:38.378766+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:38 +0000 2013-09-04t19:03:38.455542+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:38.455542+00:00 app[web.1]:   parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:38.455542+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:38.455542+00:00 app[web.1]: completed 302 found in 67ms (activerecord: 48.9ms) 2013-09-04t19:03:39.319540+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:39 +0000 2013-09-04t19:03:39.361228+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:39.361228+00:00 app[web.1]:   parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:39.361228+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:39.361228+00:00 app[web.1]: completed 302 found in 38ms (activerecord: 22.6ms) 2013-09-04t19:03:39.630525+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:39 +0000 2013-09-04t19:03:39.731993+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:39.731993+00:00 app[web.1]:   parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:39.731993+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:39.731993+00:00 app[web.1]: completed 302 found in 84ms (activerecord: 37.1ms) 2013-09-04t19:03:39.741297+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=117ms status=302 bytes=100 

result

i don't see changes in database. nothing saved.


way #4

titanium

this time organize params object in different way. otherwise, similar way #1

var params =      { problem : {         avatar : $.report_image_view.reportphoto.toimage(),         title : $.report_title_view.title.value,         description : $.report_description_view.description.value,         ptype : $.report_type_view.report_type.value['valueid'],         status : 1,         priority : 2,         latitude : latitude,         longitude : longitude,         user_id : 2          }}   // prepare connection. client.open("post", url); client.send(params);    

ror log

2013-09-04t19:19:38.381670+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=4ms service=11ms status=307 bytes=0 2013-09-04t19:19:41.117687+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:19:41 +0000 2013-09-04t19:19:41.162099+00:00 app[web.1]: nomethoderror (undefined method `stringify_keys' #<string:0x00000003672638>): 2013-09-04t19:19:41.162099+00:00 app[web.1]:   app/controllers/problems_controller.rb:29:in `new' 2013-09-04t19:19:41.162099+00:00 app[web.1]:   app/controllers/problems_controller.rb:29:in `create' 2013-09-04t19:19:41.162099+00:00 app[web.1]:  2013-09-04t19:19:41.162099+00:00 app[web.1]:  2013-09-04t19:19:41.162726+00:00 app[web.1]: processing problemscontroller#create url_encoded_form 2013-09-04t19:19:41.162726+00:00 app[web.1]:   parameters: {"problem"=>"{\n    avatar = \"[object tiblob]\";\n    description = \"enter description\";\n    latitude = \"37.33159255981445\";\n    longitude = \"-122.0305099487305\";\n    priority = 2;\n    status = 1;\n    title = \"a test title\";\n    \"user_id\" = 2;\n}"} 2013-09-04t19:19:41.162726+00:00 app[web.1]: completed 500 internal server error in 39ms 2013-09-04t19:19:41.164682+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=50ms status=500 bytes=643  

result nothing saved in database. however, time explicitly produced nomethoderror in new , create methods of problems controller.


way #5

titanium

this time i'm creating object in way #4 passing directly send() method parameter, in way #3.

// prepare connection. client.open("post", url); client.send({     problem : {         avatar : $.report_image_view.reportphoto.toimage(),         title : $.report_title_view.title.value,         description : $.report_description_view.description.value,         ptype : $.report_type_view.report_type.value['valueid'],         status : 1,         priority : 2,         latitude : latitude,         longitude : longitude,         user_id : 2  }});  

ror log

2013-09-04t20:16:36.865831+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=3ms status=307 bytes=0 2013-09-04t20:16:38.772048+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 20:16:38 +0000 2013-09-04t20:16:38.808102+00:00 app[web.1]: nomethoderror (undefined method `stringify_keys' #<string:0x00000005d45f58>): 2013-09-04t20:16:38.808102+00:00 app[web.1]:   app/controllers/problems_controller.rb:29:in `new' 2013-09-04t20:16:38.808102+00:00 app[web.1]:   app/controllers/problems_controller.rb:29:in `create' 2013-09-04t20:16:38.808102+00:00 app[web.1]:  2013-09-04t20:16:38.808102+00:00 app[web.1]:  2013-09-04t20:16:38.808786+00:00 app[web.1]: processing problemscontroller#create url_encoded_form 2013-09-04t20:16:38.808786+00:00 app[web.1]:   parameters: {"problem"=>"{\n    avatar = \"[object tiblob]\";\n    description = \"fix asap.\";\n    latitude = \"37.33069610595703\";\n    longitude = \"-122.0306701660156\";\n    priority = 2;\n    status = 1;\n    title = \"a broken water pipe\";\n    \"user_id\" = 2;\n}"} 2013-09-04t20:16:38.808786+00:00 app[web.1]: completed 500 internal server error in 30ms 2013-09-04t20:16:38.809384+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=41ms status=500 bytes=643 

result

same errors way #4


this has been driving me crazy.

do know doing wrong? how can fix this? i'll happy answer questions me. leave comment.

try adding :

client.setrequestheader('enctype', 'multipart/form-data');

before open function.


Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -