SammyJS从http加载json

all*_*ing 3 json sammy.js

我不清楚我应该如何使用sammyjs从外部API加载json.

这段代码效果很好:

this.get('#/contact', function(context) {
       this.load('somefile.json')
      .then(function(items) {
            $.each(items, function(i, item) {
              context.log(item);
            });
        });

    });
Run Code Online (Sandbox Code Playgroud)

然而,通过http加载的相同json失败:

this.get('#/contact', function(context) {
       this.load('http://samedomain/api/getdata')
      .then(function(items) {
            $.each(items, function(i, item) {
              context.log(item);
            });
        });

    });
Run Code Online (Sandbox Code Playgroud)

当通过http加载时,sammy不再将json视为对象,并且似乎将数据解析为文本.

大家都清楚这不是域访问的问题.

 header('Access-Control-Allow-Origin: *');
Run Code Online (Sandbox Code Playgroud)

我也不相信这是我的json格式的问题,因为它作为本地文件加载时似乎工作正常.

我的休息api也在使用:

"Content-Type: application/json;
Run Code Online (Sandbox Code Playgroud)

更新: 我把这个用在wordpress中,并在它帮助其他人的情况下在此列出

(function($) {    
var app = $.sammy('#main', function() {
    this.use('Template');

     this.helpers({
            loadJSON: function(location, options, callback) {
                options = $.extend(options, {json: true});
                return new Sammy.RenderContext(this).load(location, options, callback);
            }
        });


    this.get('#/', function(context) {
        this.loadJSON('http://localhost/wp-somesite/wp-admin/admin-ajax.php?action=get_all_cases')
            .then(function(items) {
                $.each(items, function(i, item) {
                  context.log(item);
                });
            });
      });

    });

$(function() {
    app.run('#/');
});
Run Code Online (Sandbox Code Playgroud)

})(jQuery的);

Zac*_*ach 6

除了VoDurden所说的,您还可以传递显式设置dataType的加载选项.如果你看一下Github上的Sammy Load函数,你会发现它只是一个ajax调用的包装器.

尝试这样的事情:

loadOptions =   {
                type: 'get', 
                dataType: 'json',
                data: {query: variable},
            };

context.load("http://path.com/api/", loadOptions);
Run Code Online (Sandbox Code Playgroud)