js:有关TypeError: invalid 'in' operand obj的错误

<!doctype html>
<html lang="en">
<script type="text/javascript">
$.ajax({  
	url:sysPath+'/controller/getDelivery.mmx?popId='+value,      
	type:'post',  
	success:function(data){  
		console.log(data);(1)//输出结果:[{"id":1,"name":"韵达"},{"id":2,"name":"圆通"},{"id":3,"name":"申通"}]  
		$('#delivery').html("");  
		//var returnData = $.parseJSON(data);(2)//将字符串转换成对象</span>  
		var returnData = eval(data);(3)//将字符串转换成对象
		console.log(returnData);(4)//输出结果:[Object { id=1,  name="韵达"}, Object { id=2,  name="圆通"}, Object { id=3,  name="申通"}]  
		$.each(returnData, function(i, obj){  
		$('#delivery').append('<option value='+obj.id+'>'+obj.name+'</option>');  
		});  
	}  
}); 
</script>
<body>
     <select name="delivery" id="delivery" style="width:100px">
	   <c:forEach items="${list}" var="bean">
	   <option value="${bean.id}"  ${bean.id == 1 ? "selected":""}>${bean.name}</option> 
     </select>
</body>
</html>

使用each解析时候,如果不加(2)、(3)句,就会报错TypeError: invalid 'in' operand obj。

原理可以看看这个:http://www.bennadel.com/blog/1918-Javascript-s-IN-Operator-Does-Not-Work-With-Strings.htm

下面说说(2)、(3)句的作用,(2)、(3)句的作用是一样的,两种实现方式而已,他们的作用是什么呢?

原因:由于在js中遍历时in操作支持instance of Object, Array, Date, Number, 但是对String是不支持的,同时url:sysPath+'/controller/getDelivery.mmx?popId='+value,返回的又是json类型的字符串(如:"[{"id":1,"name":"韵达"},{"id":2,"name":"圆通"},{"id":3,"name":"申通"}]"),所以对字符串进行$.each()操作,就会报错。

解决办法:所以我们就要去字符串进行转换,转换成对象数组类型(如:[Object { id=1,  name="韵达"}, Object { id=2,  name="圆通"}, Object { id=3,  name="申通"}]),而//var returnData = $.parseJSON(data);//将字符串转换成对象;(2) var returnData = eval(data);//将字符串转换成对象(3),这两句代码正好可以将字符串转换成对象数组,达到我们的目的

后台代码:

@Controller
@RequestMapping("/controller")
public class controller {

	@RequestMapping("/getParamDelivery")
	@ResponseBody
	public List<voSelect> getParamDelivery(String param){
		List<voSelect> list = service.getParamDelivery(pop);
		return deliveryList;
	}
}

public List<voSelect> getParamDelivery(String param) {
		List<voSelect> list = new ArrayList<voSelect>();
		String sql = "select DISTINCT a.id,a.name from table1 a JOIN table2 b ON a.delivery_id=b.id  ";
		list = this.getJdbcTemplate().query(sql,new BeanPropertyRowMapper<voSelect>(voSelect.class));
		return list;
	}	

public class voSelect implements Serializable {
	private int id;
	private String name;
	
	public voSelect(){}
	
	public voSelect(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
}


 

TypeError: Invalid URL 是一个常见的错误,通常在处理URL时出现。这个错误表明提供的URL格式不正确,无法被解析。以下是一些常见的原因和解决方法: 1. **URL格式不正确**: - 确保URL的格式正确,包括协议(如http://或https://)、域名和路径。例如,`http://example.com` 是一个有效的URL,而 `example.com` 则不是。 2. **缺少协议**: - 某些库或函数要求URL必须包含协议。如果缺少协议,会导致Invalid URL错误。确保URL包含正确的协议。 3. **非法字符**: - URL中包含非法字符也会导致错误。确保URL中只包含允许的字符,可以使用URL编码工具对特殊字符进行编码。 4. **空URL**: - 传递一个空字符串或未定义的URL会导致错误。确保在传递URL之前进行非空检查。 5. **编码问题**: - 确保URL的编码正确,特别是包含非ASCII字符时。 ### 示例代码 ```python import validators def is_valid_url(url): return validators.url(url) # 示例URL urls = [ "http://example.com", "https://example.com", "example.com", "http://ex ample.com", "" ] for url in urls: if is_valid_url(url): print(f"'{url}' 是一个有效的URL") else: print(f"'{url}' 不是一个有效的URL") ``` ### 解决方法 1. **检查URL格式**: - 确认URL是否包含协议,如`http://`或`https://`。 2. **使用URL解析库**: - 使用诸如`validators`或`urllib`等库来验证和解析URL。 3. **处理异常**: - 在代码中添加异常处理,捕获并处理Invalid URL错误。 4. **编码转换**: - 对URL进行编码转换,确保所有字符都是有效的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值