我正在使用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/