Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ajax POST and Django Tastypie

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"latlong": "test"}' http://localhost:8000/geo/api/geolocation/

The above works fine but when I try to replicate the POST in the ajax below I get 500 error.

$.ajax({
  type: 'POST',
  url: 'http://localhost:8000/geo/api/geolocation/',
  data: '{"latlong": "test"}',
  success: latlongSaved(),
  dataType: "application/json",
  processData:  false,
});

Error message is:

{"error_message": "The format indicated 'application/x-www-form-urlencoded' had no available deserialization method. Please check your ``formats`` and ``content_types`` on your Serializer." .... }

Worth noting this is cross domain and I'm using the django-crossdomainxhr-middleware.py found via git:gist

If I add a content type to the ajax call like this:

contentType: "application/json"

I get this error back:

XMLHttpRequest cannot load http://localhost:8000/geo/api/geolocation/. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
Request URL:http://localhost:8000/geo/api/geolocation/
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
Access-Control-Request-Headers:Origin, Content-Type, Accept
Access-Control-Request-Method:POST
Origin:http://localhost:3000
Response Headersview source
Access-Control-Allow-Methods:POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin:*
Content-Type:text/html; charset=utf-8
Date:Tue, 23 Aug 2011 07:59:49 GMT
Server:WSGIServer/0.1 Python/2.6.1
like image 682
Rob B Avatar asked Aug 22 '11 16:08

Rob B


1 Answers

You are explicitly declaring your content type in your call to curl, but you are not being specific on your jQuery.ajax() call.

Update your JavaScript to define exactly what the content type is going to be:

$.ajax({
  type: 'POST',
  url: 'http://localhost:8000/geo/api/geolocation/',
  data: '{"latlong": "test"}',
  success: latlongSaved(),
  dataType: "application/json",
  processData:  false,
  contentType: "application/json"
});
like image 108
Jack M. Avatar answered Sep 30 '22 18:09

Jack M.