如何在 jsonp 中使用 ic-ajax?

How to use ic-ajax with jsonp?

提问人:bguiz 提问时间:7/12/2014 最后编辑:Tarynbguiz 更新时间:11/14/2014 访问量:715

问:

在控制器中:

/*globals Ember*/

import { raw as icAjaxRaw } from 'ic-ajax';
...
    myData: function() {
        var promise = new Ember.RSVP.Promise(function (resolve, reject) {
            var req = icAjaxRaw({
                type: 'GET',
                url: server+'/api/mydata?callback=?',
                dataType: 'jsonp', //problematic
            });
            req.then(
                function(result) {
                    console.log('myData', result.response);
                    resolve(result.response);   
                },
                function(response) {            
                    console.error('myData', response.jqXHR.responseText, response);
                    reject(response);
                }
            );
        });
        return promise;
    }.property(),

...在使用该控制器的模板中:

{{myData}}

这将显示:

    {
    "_id": 101,
    "_subscribers": []
    }

它看起来像一个中间对象,而不是 promise 解析到的对象。我有一种感觉,这可能与余烬运行循环有关,如此处所述

如何让模板显示控制台日志中显示的内容?

JavaScript ajax rsvp.js

评论

0赞 Martijn Pieters 7/14/2014
在有关于库的大量问题之前,请不要为其创建标签。出于某种原因,我将其从您的帖子中删除。ic-ajax
2赞 bguiz 7/14/2014
@MartijnPieters,这是这个问题最重要的一个标签
0赞 Martijn Pieters 7/14/2014
不,不是真的。目前还没有专家会遵循这个标签;没有人会通过关注一个只附有一两个问题的标签来找到您的帖子。
0赞 Martijn Pieters 7/14/2014
不要只是不断重新添加标签。回滚战争不会去任何地方。请在 Meta Stack Overflow 上讨论此类问题。您的特定标签元帖子而受到审查。
1赞 bguiz 7/14/2014
因此,如果此标签只有一个问题,则该标签的有效性不会降低。通过阻止创建第一个,也可以阻止后续的创建。

答:

0赞 LarsJK 11/14/2014 #1

不能从计算属性返回 promise。

计算属性不解析 promise,这意味着“myData”是 promise,而不是 promise 解析为的值。 您可能应该将其移动到 Route 的模型钩子中。如果这不是一个选项,你可以做这样的事情:

myData: {},

getMyData: function() {
  var self = this;
  var req = ic.ajax.raw({
    type: 'GET',
    url: 'http://ip.jsontest.com/?callback=?',
    dataType: 'jsonp'
  });
  req.then(
    function(result) {
      console.log('myData', result.response);
      self.set('myData', result.response);
    },
    function(response) {
      console.error('myData', response.jqXHR.responseText, response);
    }
  );
}.on('init')

检查这个 JSBin