2014-07-06 32 views
0

使用parse.com和JavaScript SDK。如何解決未捕獲的錯誤:無法序列化未保存的Parse.Object錯誤消息?

我已經搜索過,但找不到一個很好的答案。

這個函數在我只使用當前用戶的時候有效。但是它應該做的是使用存儲在變量friendRequest中的值來查詢解析中已經存在的結果。 FriendRequest變量填充一旦用戶點擊在頁面上顯示的圖像之一div id container

我得到以下錯誤,我不知道如何解決它?是否因爲FriendRequest未定義?

Uncaught Error: Can't serialize an unsaved Parse.Object

附上屏幕截圖。

這裏是返回錯誤的函數。

function FriendProfile() { 

    var FriendRequest = Parse.Object.extend("FriendRequest"); 
    var friendRequest = new FriendRequest(); 
    friendRequest.id = window.selectedFriendRequestId; 


    var myBadges = Parse.Object.extend("myBadges"); 
    var query = new Parse.Query(myBadges); 

    query.equalTo("SentTo", friendRequest); 
    query.find({ 
     success: function (results) { 
      // If the query is successful, store each image URL in an array of image URL's 
      imageURLs = []; 
      for (var i = 0; i < results.length; i++) { 
       var object = results[i]; 
       imageURLs.push(object.get('BadgeName')); 
      } 
      // If the imageURLs array has items in it, set the src of an IMG element to the first URL in the array 
      for (var j = 0; j < imageURLs.length; j++) { 
       $('#imgs').append("<img src='" + imageURLs[j] + "'/>"); 
      } 
     }, 
     error: function (error) { 
      // If the query is unsuccessful, report any errors 
      alert("Error: " + error.code + " " + error.message); 
     } 
    }); 
} 

這裏是friendRequest變量的方式填充。

var currentUser = Parse.User.current(); 
     var FriendRequest = Parse.Object.extend("FriendRequest"); 

     var query = new Parse.Query(FriendRequest); 
     query.include('toUser'); 
     query.include("myBadge"); 
     query.equalTo("fromUser", currentUser); 
     query.equalTo("status", "Request sent"); 

     query.find({ 
      success: function (results) { 
       var friends = []; 
       for (var i = 0; i < results.length; i++) { 
        friends.push({ 
         imageURL: results[i].get('toUser').get('pic'), 
         friendRequestId: results[i].id, 
         username: results[i].get('toUser').get('username') 
        }); 
       } 

       // TW: replaced dynamic HTML generation with wrapper DIV that contains IMG and name DIV 
       _.each(friends, function (item) { 
        // using a wrapper so the user can click the pic or the name 
        var wrapper = $('<div class="wrapper" data-friend-request-id="' + item.friendRequestId + '"></div>'); 
        wrapper.append('<img class="images" src="' + item.imageURL + '" />'); 
        wrapper.append('<div>' + item.username + '</div>'); 
        $('#container').append(wrapper); 
       }); 

      }, 
      error: function (error) { 
       alert("Error: " + error.code + " " + error.message); 
      } 
     }); 


     ///SECTION 2 -Click/Select friend image to be captured and used with section 3////////// 

     // set up event handler 
     $('#container').on('click', '.wrapper', function() { 
      console.log(this); 
      FriendProfile(); 
      var wrapper = $(this); 
      console.log(wrapper.data('friendRequestId')); 
      // remove selected from all wrappers in case one was already selected 
      $('#container .wrapper').removeClass('selected'); 
      // mark clicked wrapper as selected 
      wrapper.addClass('selected'); 
      // save friendRequestId as a global that can be read by other code 
      window.selectedFriendRequestId = wrapper.data('friendRequestId'); 
      // enabled button 
      $('#simulateAddBadge').removeAttr('disabled'); 
     }); 

     $(document).ready(function() { 

      $('.go').css('cursor', 'pointer'); 
      $('.go').click(function (e) { // Button which will activate our modal 
           $(this).width(100).height(100).appendTo('#badgeselect'); 

      }); 
      return false; 

     }); 

enter image description here

+1

如果'window.selectedFriendRequestId'未設置時'FriendProfile()'叫,那麼你會得到一個錯誤。在那裏添加'console.log(window.selectedFriendRequestId)'來幫助你調試。 –

+0

修復它,但揭示更多問題。如果添加它,我會接受評論作爲答案。乾杯 – Dano007

回答

1

如果window.selectedFriendRequestId未設置時FriendProfile()被調用,然後你會得到一個錯誤。在那裏添加console.log(window.selectedFriendRequestId);以幫助您進行調試。

您需要檢查之後的邏輯,您可能需要將friendRequestId作爲該函數的參數,並在點擊處理程序中提取該值並將其作爲參數傳遞。目前您的「SECTION 2」代碼正在調用該函數,然後再設置該值。

簡單的例子:

function FriendProfile(friendRequestId) { 
    // query based on friendRequestId ... 
} 

// other code that calls function 
$('#container').on('click', '.wrapper', function() { 
    var wrapper = $(this); 
    var friendRequestId = wrapper.data('friendRequestId'); 
    FriendProfile(friendRequestId); 
    // other code ... 
}); 
相關問題