2013-02-01 68 views
0

鄉親們!使用ember-data存儲從跨域ajax請求的遠程服務器獲取的數據的任何示例?現在我有這個,但是......Ember.js餘燼數據和跨域阿賈克斯請求

TravelClient.Tour = Ember.Object.extend({ 
}); 

TravelClient.Tour.reopenClass({ 
    allTours: [], 
    find: function(){ 
    $.ajax({ 
     url: 'http://someIP:somePORT/tours.json', 
     dataType: 'jsonp', 
     context: this, 
     success: function(data){ 
     data.forEach(function(tour){ 
      this.allTours.addObject(TravelClient.Tour.create(tour)) 
     }, this) 
     } 
    }) 
    return this.allTours; 
    } 
}); 

UPDATE: 現在,我做了這種方式:

TravelClient.Tour.reopenClass({ 
    allTours: [], 
    find: function(){ 
    $.ajax({ 
     url: 'http://someIP:somePORT/tours.json', 
     dataType: 'jsonp', 
     context: this, 
     success: function(response){ 
     response.data.forEach(function(tour){ 
      this.allTours.addObject(TravelClient.Tour.create(tour)) 
     }, this) 
     } 
    }) 
    return this.allTours; 
    } 
}); 

但得到這個錯誤:

Uncaught TypeError: Cannot call method 'forEach' of undefined 

SNAPSHOT:

這個:

$.ajax({ 
    dataType: 'jsonp', 
    url:"http://192.168.1.39:3000/tours.json", 
    success:function(response){ 
    return response.data; 
    } 
}); 

我得到這個:

Object 
abort: function (e){var t=e||S;return r&&r.abort(t),N(0,t),this} 
always: function(){return i.done(arguments).fail(arguments),this} 
complete: function(){if(a){var t=a.length;(function r(t){y.each(t,function(t,n){var i=y.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
done: function(){if(a){var t=a.length;(function r(t){y.each(t,function(t,n){var i=y.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
error: function(){if(a){var t=a.length;(function r(t){y.each(t,function(t,n){var i=y.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
fail: function(){if(a){var t=a.length;(function r(t){y.each(t,function(t,n){var i=y.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
getAllResponseHeaders: function(){return E===2?s:null} 
getResponseHeader: function (e){var t;if(E===2){if(!o){o={};while(t=wn.exec(s))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return t==null?null:t} 
overrideMimeType: function (e){return E||(c.mimeType=e),this} 
pipe: function(){var e=arguments;return y.Deferred(function(n){y.each(t,function(t,s){var o=s[0],u=y.isFunction(e[t])&&e[t];i[s[1]](function(){var e=u&&u.apply(this,arguments);e&&y.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[o+"With"](this===r?n.promise():this,u?[e]:arguments)})}),e=null}).promise()} 
progress: function(){if(a){var t=a.length;(function r(t){y.each(t,function(t,n){var i=y.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
promise: function (e){return e!=null?y.extend(e,r):r} 
readyState: 4 
setRequestHeader: function (e,t){var n=e.toLowerCase();return E||(e=b[n]=b[n]||e,g[e]=t),this} 
state: function(){return n} 
status: 200 
statusCode: function (e){var t;if(e)if(E<2)for(t in e)m[t]=[m[t],e[t]];else x.always(e[x.status]);return this} 
statusText: "success" 
success: function(){if(a){var t=a.length;(function r(t){y.each(t,function(t,n){var i=y.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
then: function(){var e=arguments;return y.Deferred(function(n){y.each(t,function(t,s){var o=s[0],u=y.isFunction(e[t])&&e[t];i[s[1]](function(){var e=u&&u.apply(this,arguments);e&&y.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[o+"With"](this===r?n.promise():this,u?[e]:arguments)})}),e=null}).promise()} 
__proto__: Object 

回答

2

這是關於服務器應該如何將數據返回到客戶端比約燼數據更多的是,你需要做的是,包裹在回調中對ajax調用的響應,其值作爲參數發送給服務器。一旦你這樣做,這是一切如常燼數據即相當透明的,它

使用在軌道上

在客戶端

$.ajax({ 
    dataType: 'jsonp', 
    success: function(response) { 
     // loop through your objects 
     response.accounts.forEach(function(account){ 
      console.info(account.id) 
     }) 
    } 
}); 

在服務器端,你應該紅寶石下面是一個例子做同樣的事情到

params[:callback] + '("' + response + '");'; 

屈服例如類似下面的響應:

callbackValue00923411(
    { 
     "accounts": 
     [ 
      { 
       "id": 123, 
       "name": "Personal", 
      }, 
      { 
       "id": 234, 
       "name": "Corporate", 
      } 
     ] 
    } 
); 

然後在你的成功的功能您可以訪問帳戶的列表,如我上面所說,這樣

success: function(response) { 
    // loop through your objects 
    response.accounts.forEach(function(account){ 
     console.info(account.id) 
    }) 
} 

下面是關於如何使用/手柄JSONP Ajax請求

如果你有一個example訪問服務器,您可以考慮將其配置爲使用CORS,並避免使用jsonp

+0

請查看我的更新。 – xamenrax

+0

你能提供你的回覆的快照嗎? – ken

+0

查看答案中的快照。 – xamenrax