我正在使用stackmob几天,它仍然是新的,并且网络上没有太多信息。我遇到了这个问题:我不会获得我在stackmobe“ db”中的所有存储名称的列表,该存储模式称为store,这是我正在使用的代码:

var Store = StackMob.Model.extend({
    schemaName: 'store'
});

 var stores = new Store();
stores.fetch({
    success: function(collection) {
        //after we've gotten all the Todo items from StackMob, let's see what we have!
        console.debug(collection.toJSON());
        alert(collection.toJSON());
    },
    error: function(collection, response){
        alert(collection.toJSON());
    }
});


我在Chrome日志中收到此错误:

OPTIONS http://api.stackmob.com/store 400 (Bad Request)
XMLHttpRequest cannot load http://api.stackmob.com/store. Origin http://127.0.0.1:4567 is not allowed by Access-Control-Allow-Origin.


任何帮助,将不胜感激!

最佳答案

请问您在什么环境中运行(Chrome,Firefix,Safari,Opera,Phonegap)?默认情况下,JS SDK已配置为对相对路径进行AJAX调用。例如“ / store”看起来它以某种方式被配置为直接命中“ api.stackmob.com”,这仅在以下情况下发生:


JS SDK检测到您正在使用PhoneGap
您已经指定了直接通过init进入api.stackmob.com的URL:

StackMob.init({
  ...
  apiURL:“ http://api.stackmob.com/
})


我问自己的第一个问题是,当您看起来像在Python服务器上运行时,它是如何调用api.stackmob.com的:(我想就是这样,因为我在您的服务器上看到127.0.0.1:4567原始帖子)

Dennis Rongo上面指出的另一件事是您的Python版本。我们在2.7上进行了测试,但听起来他在注意3.3的问题。但是,您仍然无法从127.0.0.1:4567访问api.stackmob.com。您在init中设置了apiURL:'...'吗?如果是这样,我会尝试将其删除。

设置apiURL将使SDK直接调用api.stackmob.com(api.stackmob.com/store),并且浏览器的行为将与常规AJAX调用相同,并且如果跨域将其阻止,则会出现错误。

好吧,让我知道!我们绝对想让您前进!

埃里克

附言:我认为您还试图获得一家以上的商店。 StackMob.Model仅代表一个商店。您需要StackMob.Collection。

例如

var Store = StackMob.Model.extend({ schemaName: 'store' });
var Stores = StackMob.Collection.extend({ model: Store });

var stores = new Stores();
stores.fetch({
  success: function(results) {
    console.log(results.toJSON()); //should print out array of JSON objects representing your store items.
  }
});


更多信息:
http://developer.stackmob.com/tutorials/js/Query-an-Object

关于javascript - 回调上的stackmob错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14838265/

10-09 10:13