无法在淘汰赛中获得可观察到的数据

时间:2016-03-15 08:49:32

标签: javascript jquery knockout.js

我发送一个ajax请求来获取数据,使用此代码。

self.emailNotification = ko.observable();


    self.checkNotificationOfEmail = function (){
        $.ajax({
               type: 'POST',
               url: BASEURL + 'index.php/myprofile/checkNotificationOfEmail/' + auth,
               contentType: 'application/json; charset=utf-8'
           })
           .done(function(data) {
               alert(data);
            self.emailNotification(data.on_off);


           })
           .fail(function(jqXHR, textStatus, errorThrown) {
               self.errorMessage(errorThrown);
           })
           .always(function(data){               
           });
    };
    self.checkNotificationOfEmail(); 

问题是当我发出警报(数据)时我得到了对象对象,当我尝试将我所进入的数据推入self.emailNotication observable时,它无效。不知道我做错了什么。当我尝试提醒self.emailNotification(data.on_off);我得到了不确定。 检查控制台时 enter image description here

2 个答案:

答案 0 :(得分:2)

你的ajax调用的响应是一个数组,所以

public static Bakery createBakery(final String orderedBakegood)
{
 switch(bakegood)
 {
  case "Cake": return new CakeBakery();
  case "Bread": return new BreadBakery();
  default: throw new InvalidBakeryException();
 }
}

未定义,您需要访问集合中的第一个项目

self.emailNotification(data.on_off);

答案 1 :(得分:1)

您应该使用alert之外的其他工具进行调试,console.log或者甚至是调试器。这将为您提供更多信息。

您的具体问题可能是因为data的结构不符合您的预期:它包含数组项目。除此之外你的代码还可以。参见:

var BASEURL = "/testing/", auth = "faketestvalue";

function ViewModel() {
  var self = this;

  self.emailNotification = ko.observable();

  self.checkNotificationOfEmail = function() {
    $.ajax({
        type: 'POST',
        url: BASEURL + 'index.php/myprofile/checkNotificationOfEmail/' + auth,
        contentType: 'application/json; charset=utf-8'
      })
      .done(function(data) {
        alert(data);
        self.emailNotification(data[0].on_off);
      });
  };
}

// Fake ajax stuff (synchronously):
var fakeData = [{ on_off: true }];

var $ = {
  ajax: function(options) {
    return {
      done: function(callback) {
        callback(fakeData);
      }
    };
  }
};

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<button data-bind="click: checkNotificationOfEmail">checkNotificationOfEmail</button>
<hr>
Debug info:
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>