0

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

任何帮助,将不胜感激!

4

2 回答 2

3

请问你在什么环境下运行(chrome、firefix、safari、opera、phonegap)?默认情况下,JS SDK 配置为对相对路径进行 AJAX 调用。例如“/store”它似乎以某种方式配置为直接点击“api.stackmob.com”,这仅在以下情况下发生:

  • JS SDK 检测到您正在使用 PhoneGap
  • 您已指定 URL 以直接通过 init 访问 api.stackmob.com:

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

我问自己的第一个问题是它是如何调用 api.stackmob.com 的,而它看起来像你在 Python 服务器上运行:(我假设是这样,因为我在你的原帖)

Dennis Rongo 在上面指出的另一件事是您的 Python 版本。我们使用 2.7 进行了测试,但听起来他注意到 3.3 存在问题。但是您从 127.0.0.1:4567 访问 api.stackmob.com 仍然出乎意料。你有 apiURL: '...' 在你的初始化中设置吗?如果是这样,我会尝试删除它。

设置 apiURL 将使 SDK 直接调用 api.stackmob.com (api.stackmob.com/store),并且浏览器的行为就像任何常规 AJAX 调用一样,如果它跨域,则阻止它,给出您看到的错误.

好吧,让我知道!我们绝对想让你去!

埃里克

PS我认为您还试图获得不止一家商店。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

于 2013-02-13T19:56:37.710 回答
1

我以前从未使用过 StackMob,但决定检查一下,并能够使其在本地(localhosthttp://127.0.0.1/)工作。

有几件事你可以看看。

  • 转到您的StackMob Dashboard并检查您Schema的权限级别是否设置正确。如果您的任何操作未设置为Open,请在拨打电话之前先检查您是否正确进行了身份验证Fetch()

  • 您还需要安装 Python 2.7+(我建议坚持使用 2.7,因为 3.3 会破坏他们的Python脚本)。安装说明。Python 可以在这里下载。

    安装说明包括stackmobserver.py您需要放在项目根目录中的内容。导航到项目的根目录并使用初始化执行Python脚本(仅用于开发目的)。Command

    python stackmobserver.py

  • 检查你的initauthentication脚本。

    /** Initialize StackMob */
    StackMob.init({...});
    
    /** Perform authentication using User schema */
    var user = new StackMob.User({ username: 'yourUser', password: 'yourPassword' });
    user.login(false, {
        success: function (model) {
        /** Perform the Model fetch for the authenticated user. */
        },
        error: function (model, response) {
            console.debug(response);
        }
    });
    

希望这可以帮助。

于 2013-02-13T00:23:39.637 回答