2

How do I set up Ember Data to use the JSONP datatype when making its ajax calls? I am going to be using Ember with Phonegap and need to make cross-domain requests.

edborden
  • 133
  • 9

2 Answers2

7

It's much easier to override the private ajaxOptions function instead of using jQuery. Ember's pipeline includes the removal of the jQuery dependency anyways. So do this instead:

adapters/application.js:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
    ajaxOptions: function(url, type, options) {
        var hash = this._super(url, type, options);
        hash.dataType = "jsonp";
        return hash;
    }
});

It would be create if the Ember core team could expose a public method to officially support this (instead of hacking a private api).

https://github.com/emberjs/data/blob/1.0.0-beta.15/packages/ember-data/lib/adapters/rest_adapter.js#L915

Jamie Chong
  • 832
  • 9
  • 13
4

You need to create your own adapter which uses jsonp, you can do just that by extending a current one, have a look.

App.MyAdapter= DS.RESTAdapter.extend({})

Then you need to implement the find method among others, to use jsonp, could be something like this

App.MyAdapter= DS.RESTAdapter.extend({
  find: function(store, type, id) {
     var item;
     $.ajax({
      url: 'http://api.domain/someModel',
      dataType: 'jsonp',
      success: function(response){
        item = App.someModel.create(order))
      }
    });
    return item;
  },

This is not tested, but it should give you the idea of how i can be done. :)

MartinElvar
  • 5,695
  • 6
  • 39
  • 56
  • This worked, since thankfully there is only one method in Ember-Data that requires defining the dataType. – edborden Feb 11 '14 at 01:37
  • 1
    One other thing to note however, which I figured out while doing this, is that Phonegap doesn't require using JSONP, just setting domain accessibility in the config.xml. – edborden Feb 11 '14 at 01:38