$ .get在请求URL中发送原型函数?

时间:2011-01-29 23:15:11

标签: javascript jquery xmlhttprequest

我在Object添加了一些原型函数,我认为这些函数在某些情况下是实用的。但是,我注意到当我执行$ .get时,原型函数作为数据成员处理,并像http://...?prototypefunc=false一样发送。

这是没用的,因为我不提供这些作为数据成员,但是 被添加到查询字符串中。

确切地说,我有这段代码:

Object.prototype.in = function() {
    for(var i=0; i<arguments.length; i++)
       if(arguments[i] == this) return true;
    return false;
}

$.get('http://localhost/test.php', {'test': 'foo'}, function(text) { });

构造的相应URL是:

http://localhost/test.php?test=foo&in=false

我该如何避免这种情况?

2 个答案:

答案 0 :(得分:2)

jQuery在传递的对象上运行for...in循环,该循环遍历对象的所有可枚举属性,无论是否继承。它不会检查对象的属性是由对象拥有还是通过原型链继承。

此外,如果在对象序列化过程中遇到一个值为函数的属性,它将执行该函数并使用返回值。

有一些解决方案:

  • 更改您的代码,使其不会修改Object.prototype
  • 传递字符串而不是对象,或使用您自己的代码将对象序列化为字符串。
  • 使用您自己的方法覆盖jQuery.param()函数,并强制它使用.hasOwnProperty(propertyName)检查每个属性。
  • 使用Object.defineProperty()(仅限ECMAScript 5兼容浏览器)使原型链上的属性不可枚举。

答案 1 :(得分:1)

在你的情况下,如果你不想在函数中删除它,你应该将数据序列化(使用与jQuery serialize 类似的函数)到字符串并将其附加到URL。 / p>