无法使用Parse JS SDK更新Parse对象

时间:2016-08-03 21:03:59

标签: javascript parse-platform

我正在测试一些基本的东西,这很令人困惑。

解析JavaScript SDK v1.9.0:

<script src="parse.min.js"></script>
<script>
    Parse.initialize("KEY");
    Parse.serverURL = 'URL'
</script>

连接到Facebook:

window.fbAsyncInit = function() {
    Parse.FacebookUtils.init({
        appId      : 'ID',
        xfbml      : true,
        version    : 'v2.7'
    });
};

(function(d, s, id){
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

获取当前用户:

    var user = Parse.User.current();

到目前为止一切都很好。我可以从用户那里阅读和显示。

当我尝试更新用户时:

user.set("name","test");
user.save();

RangeError:超出最大调用堆栈大小。

我检查了递归。这只被称为一次。不知道为什么会抛出这个错误。

编辑:修复语法。错误仍然存​​在。

编辑2:如果我尝试更新currentUser或者将另一个对象的指针设置为currentUser,则会出现相同的错误。例如:

以下创建一个新的InterestObject就好了,除非我将用户列设置为指向currentUser的指针。然后我得到了同样的错误。

var currentUser = Parse.User.current();
var InterestObject = Parse.Object.extend("CadetsInterest");
var intObj = new InterestObject();
intObj.save({
user: currentUser,
cadets: [checkCadets state],
cadets2: [checkCadets2 state],
cwg: [checkCWG state],
question: [txtQuestion stringValue]
}).then(function(object) {
[viewSuccess setHidden: NO];
[viewInterest setHidden: YES];
});

1 个答案:

答案 0 :(得分:1)

我认为代码中的语法应为:

user.set("name","test");

在你的情况下你写道:

user.set("name"),"test"

<强>更新

根据您提供的代码,我没有看到任何登录电话,以便登录Facebook。 我做了一些辅助项目并设法做到了。我做的是以下几点:

  1. 转到https://developers.facebook.com
  2. 创建Web类型的脸书应用
  3. 在你的Facebook应用程序URL中输入你的服务器URL(在我的情况下,我是在我的本地主机上做的,所以我把URL放在托管我的应用程序的地方)
  4. 转到您的解析应用并写下以下代码:
  5. &#13;
    &#13;
    <!doctype html>
    
    <head>
      <meta charset="utf-8">
    
      <title>My Parse App</title>
      <meta name="description" content="My Parse App">
      <meta name="viewport" content="width=device-width">
      <link rel="stylesheet" href="css/reset.css">
      <link rel="stylesheet" href="css/styles.css">
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
      <script type="text/javascript" src="http://www.parsecdn.com/js/parse-latest.js"></script>
    </head>
    
    <body>
    
      <div id="main">
        <h1>You're ready to use Parse!</h1>
    
        <p>Read the documentation and start building your JavaScript app:</p>
    
        <ul>
          <li><a href="https://www.parse.com/docs/js_guide">Parse JavaScript Guide</a>
          </li>
          <li><a href="https://www.parse.com/docs/js">Parse JavaScript API Documentation</a>
          </li>
        </ul>
    
        <div style="display:none" class="error">
          Looks like there was a problem saving the test object. Make sure you've set your application ID and javascript key correctly in the call to <code>Parse.initialize</code> in this file.
        </div>
    
        <div style="display:none" class="success">
          <p>We've also just created your first object using the following code:</p>
    
          <code>
              var TestObject = Parse.Object.extend("TestObject");<br/>
              var testObject = new TestObject();<br/>
              testObject.save({foo: "bar"});
            </code>
        </div>
      </div>
    
      <script type="text/javascript">
        Parse.initialize("{PARSE_APP_ID}");
        Parse.serverURL = '{PARSE_SERVER_URL}'
    
        window.fbAsyncInit = function() {
          Parse.FacebookUtils.init({
            appId: '{YOUR_FB_APP_ID}',
            xfbml: true,
            version: 'v2.7'
          });
        };
    
        (function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {
            return;
          }
          js = d.createElement(s);
          js.id = id;
          js.src = "//connect.facebook.net/en_US/sdk.js";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));
    
    
        setTimeout(function() {
          Parse.FacebookUtils.logIn(null, {
            success: function(user) {
    
              user.set("name", "test");
              user.save();
    
            },
            error: function(user, error) {
              alert("User cancelled the Facebook login or did not fully authorize.");
            }
          });
        }, 2000);
      </script>
    </body>
    
    </html>
    &#13;
    &#13;
    &#13;

    在此代码中,我执行的操作与您执行的操作完全相同,但后来我调用了 Parse.FacebookUtils.logIn 。我在2秒后做这件事只是为了确保Parse.FacebookUtils.init被执行(在回调中做得更好但是为了测试目的我就这样做了)。 然后在我用我的Facebook帐户登录后,我将用户置于成功块内,更新他的名字并再次保存。 然后在我的解析仪表板中,我看到以下内容:

    enter image description here

    在执行此操作之前,请确保您当前的用户已登录,因为您可能有活动会话。 为了做到这一点,只需致电

    FB.User.logOut();