我怎样才能从这个坑里挖出我的变量?

时间:2010-06-26 12:20:42

标签: php javascript ajax json extjs

我昨天问了一个相当糟糕的问题,但我仍然有同样的问题。我想向对象添加一个变量属性,我尝试的解决方案是执行ajax请求以接收变量,然后将该属性设置为响应。我想我已经尝试了至少100种不同的方式:

Ext.onReady(go);

function go() {

  var x; 

  function getRating(id, callback) {
      Ext.Ajax.request({
          url: '/index.php/ajax/do_rate',
          method: 'POST',
          success: function(result)
          {
              jsonData = Ext.util.JSON.decode(result.responseText);
              x = jsonData.result;
          }
      });
  }
  r2 = new Ext.ux.form.Rater({
      displayValue: x,
      maxValue: 10
  });

  var simple = new Ext.FormPanel({
    items: [r2]
  });
  simple.render(document.body);
}

如果按上述方式尝试,则x未定义。如果我尝试在ajax请求之前创建r2,并在请求中设置其displayValue,则会在控制台中显示对象的正确displayValue,但不会使用正确的displayValue进行渲染。我不认为这是及时的。感谢您的帮助,我想我可能需要一个'回调',但无法弄清楚正确的方法。

工作代码如下:

Ext.onReady(go);

function go() {
    Ext.Ajax.request({
        url: '/index.php/ajax/do_rate',
        method: 'POST',
        success: function(result)
        {
            jsonData = Ext.util.JSON.decode(result.responseText);
            var r2 = new Ext.ux.form.Rater({
                displayValue: jsonData.result,
                maxValue: 10
            });
            var simple = new Ext.FormPanel({
            items: [r2]
            });
            simple.render(document.body);
        }
    });

}

2 个答案:

答案 0 :(得分:1)

只需执行所有,您需要处理里面的“成功”回调。

function go() {

  function getRating(id, callback) {
      Ext.Ajax.request({
          url: '/index.php/ajax/do_rate',
          method: 'POST',
          success: function(result)
          {
              jsonData = Ext.util.JSON.decode(result.responseText);

              var x = jsonData.result;

              var r2 = new Ext.ux.form.Rater({
                  displayValue: x,
                  maxValue: 10
              });

              var simple = new Ext.FormPanel({
                items: [r2]
              });
              simple.render(document.body);
          }
      });
  }
}

答案 1 :(得分:0)

你需要输入这段代码:

r2 = new Ext.ux.form.Rater({
    displayValue: x,
    maxValue: 10
});

var simple = new Ext.FormPanel({
    items: [r2]
});

在您的AJAX POST CALLBACK中,如下所示:

success: function(result)
        {
            jsonData = Ext.util.JSON.decode(result.responseText);
            x = jsonData.result;
            r2 = new Ext.ux.form.Rater({
                displayValue: x,
                maxValue: 10
            });

            var simple = new Ext.FormPanel({
                items: [r2]
            });
        }