Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/instructure/ic-ajax
ember-friendly jQuery.ajax wrapper
https://github.com/instructure/ic-ajax
Last synced: 23 minutes ago
JSON representation
ember-friendly jQuery.ajax wrapper
- Host: GitHub
- URL: https://github.com/instructure/ic-ajax
- Owner: instructure
- License: mit
- Created: 2013-11-25T22:27:49.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2015-06-24T16:40:38.000Z (over 9 years ago)
- Last Synced: 2024-11-06T20:16:36.679Z (7 days ago)
- Language: JavaScript
- Size: 574 KB
- Stars: 167
- Watchers: 9
- Forks: 29
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
ic-ajax
=======[![Build Status](https://travis-ci.org/instructure/ic-ajax.png)](https://travis-ci.org/instructure/ic-ajax)
Ember-friendly `jQuery.ajax` wrapper.
- returns RSVP promises
- makes apps more testable (resolves promises with `Ember.run`)
- makes testing ajax simpler with fixture supportInstallation
------------`bower install ic-ajax`
... or ...
`npm install ic-ajax`
Module Support
--------------Note the `dist` directory has multiple module formats, use whatever
works best for you.- AMD
`define(['ic-ajax'], function(ajax) {});`
- Node.JS (CJS)
`var ajax = require('ic-ajax')`
- Globals
`var ajax = ic.ajax;`
All instructure canvas stuff lives on the `ic` global.
API
---This lib simply wraps `jQuery.ajax` with two exceptions:
- success and error callbacks are not supported
- does not resolve three arguments like $.ajax (real promises only
resolve a single value). `request` only resolves the response data
from the request, while `raw` resolves an object with the three
"arguments" as keys if you need them.Other than that, use `request` exactly like `$.ajax`.
```js
var ajax = ic.ajax;App.ApplicationRoute = Ember.Route.extend({
model: function() {
return ajax.request('/foo');
}
}// if you need access to the jqXHR or textStatus, use raw
ajax.raw('/foo').then(function(result) {
// result.response
// result.textStatus
// result.jqXHR
});
```Simplified Testing
------------------In order to test newly added code you must rebuild the distribution.
```bash
broccoli build dist
```Adding fixtures with `defineFixture` tells ic-ajax to resolve the promise
with the fixture matching a url instead of making a request. This allows
you to test your app without creating fake servers with sinon, etc.Example:
```js
ic.ajax.defineFixture('api/v1/courses', {
response: [{name: 'basket weaving'}],
jqXHR: {},
textStatus: 'success'
});ic.ajax.request('api/v1/courses').then(function(result) {
deepEqual(result, ic.ajax.lookupFixture('api/v1/courses').response);
});
```To test failure paths, set the `textStatus` to anything but `success`.
Contributing
------------Install dependencies and run tests with the following:
```sh
npm install
npm test
```For those of you with release privileges:
```sh
npm run-script release
```Special Thanks
--------------Inspired by [discourse ajax][1].
License and Copyright
---------------------MIT Style license
(c) 2014 Instructure, Inc.
[1]:https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/mixins/ajax.js#L19