【问题标题】:Defining Arrays in Prototype Classes?在原型类中定义数组?
【发布时间】:2010-12-29 01:40:00
【问题描述】:

我试图创建一个具有四个属性的原型对象: 'name'、'basis' 和 'rows',它们是取自表单和 'head' 应该是一个字符串值数组。

类定义:

var TableTemplate = Class.create();  
 TableTemplate.prototype = {  
    initialize: function(name, basis, head, rows) {  
        this.name = name;  
        this.basis = basis;  
        this.head = head;    
        this.rows = rows;  
   },  
};

它应该传递给后端的 .php 文件,如下所示:

function sendRequest() {  
 var sorting = doSorting();  
 //alert(sorting.inspect());  
 var table = new TableTemplate($F('templateName'), $F('basisTemplate'), sorting , $F('maxRows'));  
 new Ajax.Request("test.php",   
  {   
  method: 'post',   
  postBody: 'table='+ Object.toJSON(table),  
  onComplete: showResponse   
  });  
}  

其中 'doSorting()' 返回一个字符串数组。

问题: 除了对象中的头部(数组)之外,我似乎无法获取其他属性,或者这个属性有点覆盖其他属性......当我尝试获取名称或基础时,将返回数组。

有人知道如何解决这个问题吗? 提前感谢您的帮助,

玛拉

【问题讨论】:

  • (OT) 您的类定义适用于 Prototype 1.5.x。如果您使用的是 1.6.x(理想情况下应该是,自 1.5 以来已经有好几年了,并且有很多错误修复),您需要更新它,这样您就不会替换返回的函数原型Class.create。更多信息:api.prototypejs.org/language/class.html

标签: javascript arrays class prototypejs


【解决方案1】:

(警告:我不是 PHP 人,它有一些我不熟悉的内置 JSON 处理。但我对 Prototype 相当熟悉。)

您正在指定请求的postBody,这意味着您负责确保它被正确编码。您发送的内容如下所示:

table={"name": "some template", "basis": "some head", "head": ["blah", "blah", "blah", "blah"], "rows": 15}

根据内容,它可能不会按照您在另一端的预期进行编码。

与其指定postBody,我可能只是将其作为参数发送,让框架担心为我转义:

new Ajax.Request("test.php",   
  {   
  method: 'post',   
  parameters: {table: Object.toJSON(table)},  
  onComplete: showResponse   
  });

然后从PHP端的“table”参数中获取JSON字符串并解码。

如果您仍然没有得到预期的结果,请查看 JSON 字符串并确保您得到了预期的结果。

【讨论】:

  • 感谢您的快速回答!我想现在问题已经解决了。
猜你喜欢
  • 2019-04-22
  • 1970-01-01
  • 2016-11-13
  • 2019-05-30
  • 2012-02-04
  • 1970-01-01
  • 2021-08-09
  • 2011-06-02
  • 2017-02-02
相关资源
最近更新 更多