ext Stor 的this.proxy is undefined 错误

本文介绍如何使用ExtJS框架实现ComboBox的动态加载功能。通过设置store的参数和加载方法,可以实现在选择不同选项时,从服务器获取相应数据并更新显示内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了实现Stor的动态加载,

var orgId = "";
var fStore =new Ext.data.Store({
	        autoLoad : false,
	        url: 'findFromOMRole.action?orgId='+'orgId',
	        reader : new Ext.data.JsonReader({
	            totalProperty: 'totalCount',
            	root: 'list'
	        }, [{name : 'menuName'}, { name : 'id'}]),
	        sortInfo: {field: 'menuName', direction: 'ASC'}
	    });

 在Ext.form.ComboBox({})中引如了事件listeners

 var orgIdStore = new Ext.data.JsonStore({
            url: 'findComOrgRole.action',
            autoLoad: false,
            sortInfo: {field: 'orgName', direction: 'ASC'},
            fields: [{
                name: 'role.org.id',
                mapping: 'id'
            }, {
                name: 'orgName',
                mapping: 'orgName'
            }]
        });
        orgIdStore.load();
        
        var orgIdComboBox = new Ext.form.ComboBox({
            listClass: 'x-combo-list-small',
            enableKeyEvents: true,
            selectOnFocus: true,
            hiddenName: 'role.org.id',
            name: 'role.org.id',
            id:"orgIds",
            valueField: 'role.org.id',
            displayField: 'orgName',
            blankText : '请选择',
	    emptyText : '选择机构名称',
            selectOnFocus: true,
            mode: 'local',
            triggerAction: 'all',
            store: orgIdStore,
            fieldLabel: "所在组织",
            allowBlank : false,
            editable: false,
            listeners: {'select': function(){
				Ext.getCmp('roleSele').setValue('');
				var t_orgId = Ext.getCmp('orgIds').getValue();
				fStore.load();
				}
        	}
        });

 即,当所选择项改变时,fStor的url所接受的参数的值,改变,从而实现动态加载数据的目的。

但是这样做有通过fireBug可以看到,url所接受的参数的值,没有改变,即还是原来的值,没有实现动态加载数据,

若将URL放在listeners中

listeners: {'select': function(){
				Ext.getCmp('roleSele').setValue('');
				var t_orgId = Ext.getCmp('orgIds').getValue();

url: 'findFromOMRole.action?orgId='+'orgId'
 fStore.load();
				}
        	}

firebug会报:"this.proxy is undefined "的错误。

这其实是对ext的stor的工作原理不清楚造成的。

首先,ext的stor是通过代理模式实现的,它首先通过一个代理向后台发送请求(根据url),而后再通过代理将数据返回,并对数据进行封装,才是我们最后得到的数据。

标准的Stor形式是:

var d_stor = new Ext.data.Store({
                proxy: new Ext.data.HttpProxy({
                    url: 'queryMessages.action'
                }),
                reader: _jsonReader,
                remoteSort: true//True表示在proxy配合下,要求服务器提供一个更
                                         //  新版本的数据对象以便排序,反之就是在Record缓
                                         //存中排序(默认是false)。
            });

 stor在load之前,必须要为其指定代理,若我们不指定proxy代理属性,而直接指定url,那么url如果有值传入,会为该URL创建一个HttpProxy对象,否则就没有代理模式。会报"this.proxy is undefined "的错误。

这就是为什么上面会出现这样的错误,那么如何实现数据的动态加载呢?

我们可以通过以下两种方式解决:

fStore.baseParams.orgId = orgId;
fStore.load();

 等号左边的orgId为所传参数变量,右边的orgId为所传的值,当然此处的load()方法是放在Ext.form.ComboBox({})的listeners中的。此方案的传参与加载是分开来进行的。

第二种解决方案是:

tStore.load({
	                    params: {
							orgId: t_orgId
						}
					});

 传参与加载一体化处理。

 

<think>好的,我现在需要解决用户遇到的FTP上传文件时出现550错误的问题。首先,我得回忆一下这个错误的一般原因。根据以往的经验,550错误通常与权限问题或文件路径有关。用户提到的是STOR命令返回这个错误,说明在上传文件时服务器拒绝了请求。 接下来,我需要分步骤思考可能的原因。首先,检查目标目录是否有写权限。如果用户没有写入权限,服务器自然会拒绝上传。其次,文件路径是否正确,包括目录是否存在,文件名是否合法。比如,如果路径中包含不支持的字符或者目录不存在,也会导致这个错误。 然后,考虑文件是否已存在且被锁定。如果服务器配置为不允许覆盖现有文件,而用户试图上传同名文件,就会触发550错误。此外,存储空间不足也是一个可能的原因,需要检查服务器磁盘空间。 还有,防火墙或安全软件可能会阻断FTP连接,导致传输失败。被动模式(PASV)的设置有时也会影响文件传输,尤其是在涉及防火墙的情况下。服务器配置的限制,比如文件大小限制或上传速率限制,也可能导致这个问题。 用户可能需要逐一排查这些方面。例如,首先确认权限,然后检查路径和文件名,接着查看文件是否存在和存储空间,最后考虑网络设置和服务器配置。此外,建议用户查看服务器日志,因为那里通常会有更详细的错误信息,帮助定位问题。 在提供解决方案时,需要确保步骤清晰,用户能够逐步操作。同时,要提醒用户注意文件名中的特殊字符和大小写,因为这些细节容易被忽视。另外,不同的FTP客户端可能有不同的设置,比如被动模式的开启方式,可能需要具体指导用户如何调整客户端配置。 最后,生成的相关问题需要覆盖常见的原因和进一步的故障排除,帮助用户全面理解和解决问题。</think>### FTP上传550错误解决方案 当使用FTP的STOR命令上传文件时出现"550 Requested file action not taken"错误,可通过以下步骤排查解决: 1. **权限验证** - 检查目标目录的写入权限:使用`ls -l`命令查看权限设置(Linux服务器)[^1] - 确认FTP账户是否具有写权限:尝试创建空文件测试`touch testfile` - 示例权限配置: ```bash chmod 755 /var/www/uploads # 目录权限 chown ftpuser:ftpgroup /var/www/uploads # 所有权设置 ``` 2. **路径问题排查** - 验证目标路径是否存在:使用`pwd`确认当前目录 - 检查路径拼写错误:注意大小写敏感(Linux服务器) - 测试使用绝对路径:`/var/ftp/upload/test.txt`代替相对路径 3. **文件状态检查** - 检查文件是否已存在且被锁定:`lsof | grep filename` - 确认服务器是否允许覆盖文件:尝试修改文件名上传 - 验证磁盘空间:使用`df -h`查看分区剩余空间 4. **传输模式设置** - 切换被动/主动模式: ```bash # FileZilla客户端设置示例 站点管理器 -> 传输设置 -> 传输模式选择"被动" ``` 5. **防火墙/安全策略** - 检查服务器端防火墙规则: ```bash iptables -L -n # 查看防火墙规则 ``` - 临时禁用SELinux测试: ```bash setenforce 0 # 临时关闭 ``` 6. **日志分析** - 查看服务器日志定位具体原因: ```bash tail -f /var/log/vsftpd.log # vsftpd日志路径 grep "550" /var/log/messages # 系统日志检索 ``` **典型解决方案流程**: 1. 使用`CWD`命令确认当前目录 2. 执行`STAT`命令检查连接状态 3. 尝试上传小文件测试(1KB测试文件) 4. 通过`SITE CHMOD 644 filename`修改权限 5. 检查文件名是否包含特殊字符(建议使用字母数字组合)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值