在VFP中,表单之间参数的传递与返回主要通过Do Form命令实现

javascript学习笔记(四)function函数部分,学习笔记function

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
Jscript 支持两种函数:一类是语言内部的函数(如eval()
),另一类是自己创建的。

在 JavaScript 函数内部声明的变量(使用
var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。

您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。

函数的调用方式

1、普通调用:functionName(实际参数…)

2、通过指向函数的变量去调用:  

var  myVar = 函数名;

myVar(实际参数…);

返回函数的函数

  1. 当函数无明确返回值时,返回的值就是”undefined”。

  2. 当函数有返回值时,返回值是什么就返回什么。

我们可以通过使用 return 语句实现将函数返回调用它的地方。

在使用 return 语句时,函数会停止执行,并返回指定的值。

函数通常会返回一个唯一值,那么这个值也可能是另一个函数:

复制代码 代码如下:

<script type=”text/javascript”>
    var box = function(){
        var a=1;
        return function(){
            alert(a++)
        }
    }
    alert(box());//弹出”function(){alert(a++)}”
 </script>

在这里,我们只需将返回值赋值给某个变量,然后就可以像使用一般函数那样调用它了:

复制代码 代码如下:

<script type=”text/javascript”>
    var box = function(){
        var a=1;
        return function(){
            alert(++a)
        }
    }
    var newFunc = box();
    newFunc();//2
 </script>

如果想让返回的函数立即执行,亦可以使用box()()来执行这段代码。

ECMAScript所有函数的参数都是按值传递的,言下之意就是参数不会按引用传递。

PS:如果存在按引用传递的话,那么函数里的那个变量将会是全局变量,在外部也可以访问。

(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:对象、数组、函数。

引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象;
创建匿名函数

复制代码 代码如下:

function(){
return ‘Lee’;    
//单独的匿名函数是无法运行的,就算能运行也无法调用,因为没有名字
}

这种匿名函数的用法在JQuery中非常多。直接声明一个匿名函数,立即使用。用匿名函数的好处就是省得定义一个用一次就不用的函数,而且免了命名冲突的问题,js中没有命名空间的概念,因此很容易函数名字冲突,一旦命名冲突以最后声明的为准。

通过自我执行来执行匿名函数:

复制代码 代码如下:

//通过自我执行来执行匿名函数

<script type=”text/javascript”>
  (function (){         //
(匿名函数)();第一圆括号放匿名函数,第二个圆括号执行
       alert(‘Lee’);
  })();
</script>

把匿名函数自我执行的返回值赋给变量:

复制代码 代码如下:

//把匿名函数自我执行的返回值赋给变量

    <script type=”text/javascript”>
    var box =  (function (){          
           alert(‘Lee’);
      })();         //弹出”Lee”;
    alert(box);   //弹出
undefined,如果写出alert(box()),那么只会弹出一个”Lee”  
    </script>

自我执行匿名函数的传参:

复制代码 代码如下:

//自我执行匿名函数的传参

    <script type=”text/javascript”>
    (function (age){
     alert(age);
    })(100);          //弹出100
    </script>

javascript创建动态函数:

  JavaScript支持创建动态函数,动态函数必须用Function对象来定义(Function是javascript中的一个对象,是固定不变的,规定Function对象的”F”必须大写,当是function的时候,我们知道是定义函数的时候所使用的一个关键字:function
funName(x,y),当是Function的时候(F大写的时候),我们知道是javascript中的对象)

创建动态函数的基本格式:var 变量名 = new
Function(“参数1″,”参数2″,”参数n”,”执行语句”);
看下面的一段代码:

复制代码 代码如下:

    <script type=”text/javascript”>
            var square = new Function (“x”,”y”,”var sum ; sum =
x+y;return sum;”);
             alert(“square(2,3)的结果是:”+square(2,3)); 
//square(2,3)的结果是:5
    </script>

square是动态创建的函数,在Function对象后面的括号里的每一部分内容都必须是字符串形式的,也就是说都必须用引号(””或者是”)括起来

这段代码:

var square = new Function (“x”,”y”,”var sum ; sum = x+y;return sum;”);
和下面这段代码:

复制代码 代码如下:

function square (x,y){
          var sum;
          sum = x+y;
          return sum;
     }

是一摸一样的,只不过一个是动态函数,一个是静态函数。
我们为什么要把代码分成一小段一小段的代码呢?,把一个字符串分成了若干个独立的字符串的优点就在于我们可以通过修改其中的某些字符串来随时改变函数的作用。

回调函数

回调就是一个函数的调用过程。那么就从理解这个调用过程开始吧。函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。

其实中文也很好理解:回调,回调,就是回头调用的意思。函数a的事先干完,回头再调用函数b。

这里必须清楚一点:函数b是你以参数形式传给函数a的,那么函数b就叫回调函数。

在jquery里的绝大多数效果函数都涉及到callback函数。jquery效果函数
例如:

复制代码 代码如下:

<script type=”text/javascript”>
        $(“div”).show(1000,function(){
            //callback function
        });
</script>

这里的callback function换成实例可以是:

复制代码 代码如下:

<script type=”text/javascript”>
    $(“div”).show(1000,function(){
        console.log(“hello world”)
    });
</script>

Callback实际上是,当一个函数执行完后,现执行的那个函数就是所谓的callback函数。怎么样?很好理解吧……

方法和函数的区别

复制代码 代码如下:

var arr = [1,2,3,4,5]
var a =12;   // 变量:自由的
arr.a= 5;     //属性:属于一个对象
function show()     //函数:自由的
{
     alert(‘a’);
}
arr.fn = function()   //方法:属于一个对象
{
     alert(‘b’);
}

其实方法就是函数,只不过方法是有所属的对象。

我们所熟知的,将函数绑定到 click 事件
语法:

$(selector).click(function)
参数 描述
function 可选。规定当发生 click 事件时运行的函数。
这种形式在jquery中经常见到。它是将function当做该方法的参数,向该方法添加一个事件处理函数。

js全局函数

全局函数与内置对象的属性或方法不是一个概念。全局函数它不属于任何一个内置对象。
JavaScript 中包含以下 7 个全局函数,用于完成一些常用的功能:

escape( )、eval( )、isFinite( )、isNaN( )、parseFloat( )、
parseInt( )、unescape( )。
函数的几个作用

作为一个类构造器使用

复制代码 代码如下:

function class(){}
class.prototype={};
var item=new class();

作为闭包使用

复制代码 代码如下:

(function(){
//独立作用域
})();

作为构造函数调用

所谓构造函数,就是通过这个函数生成一个新对象(object)。

复制代码 代码如下:

<script type=”text/javascript”>
        function test(){
            this.x = 10;
        }

        var obj = new test();
        alert(obj.x); //弹出 10;
 </script>

可以使用 new 运算符结合像 Object()、Date() 和 Function()
这样的预定义的构造函数来创建对象并对其初始化。面向对象的编程其强有力的特征是定义自定义构造函数以创建脚本中使用的自定义对象的能力。创建了自定义的构造函数,这样就可以创建具有已定义属性的对象。下面是自定义函数的示例(注意
this 关键字的使用)。

复制代码 代码如下:

function Circle (xPoint, yPoint, radius) {
    this.x = xPoint;  // 圆心的 x 坐标。
    this.y = yPoint;  // 圆心的 y 坐标。
    this.r = radius;  // 圆的半径。
}

调用 Circle
构造函数时,给出圆心点的值和圆的半径(所有这些元素是完全定义一个独特的圆对象所必需的)。结束时
Circle 对象包含三个属性。下面是如何例示 Circle 对象。

var aCircle = new Circle(5, 11, 99);
使用构造器函数的好处在于,它可以再创建对象时接收一些参数。

复制代码 代码如下:

<script type=”text/javascript”>
    function Test(name){
        this.occupation = “coder”;
        this.name = name;
        this.whoAreYou = function(){
            return “I’m ” + this.name + “and I’m a ” +
this.occupation;
        }
    }
    var obj = new Test(‘trigkit4’);//利用同一个构造器创建不同的对象
    var obj2 = new Test(‘student’);

    obj.whoAreYou();//”I’m trigkit4 and I’m a corder”
    obj2.whoAreYou();//”I’m student and I’m a corder”   
 </script>

依照惯例,我们应该将构造器函数的首字母大写,以便显著地区别于一般的函数。

以下两种形式的定义函数方式是等价的。

复制代码 代码如下:

<script type=”text/javascript”>
    var test = function(){
        alert(“Hello World”);
    }
    alert(typeof(test));//output function
</script>

这里明确定义了一个变量test,他的初始值被赋予了一个function实体

复制代码 代码如下:

<script type=”text/javascript”>
    function test(){
        alert(“Hello World”);
    }
    alert(typeof(test));//output function
</script>

看看下面这种定义式函数形式:

复制代码 代码如下:

<script type=”text/javascript”>
        function test(){
            alert(“Hello World”);
        };
        test();//居然输出Hello,很奇怪不是吗?

        function test(){
            alert(“Hello”);
        };
        test();//正常滴输出了Hello
</script>

很显然,第一个函数并没有起到作用,很奇怪不是吗?我们知道,javascript解析引擎并不是一行一行地执行代码,而是一段一段地执行代码。在同一段程序的分析执行中,定义式的函数语句会被优先执行,所以第一个定义的代码逻辑已经被第二个覆盖了,所以两次调用相同函数,只会执行第二个。

作为值的函数

函数在js中不仅是一种语法,也是一个值。也就是说可以将函数赋值给变量,存储在对象的属性或数组的元素中,作为参数传入另一个函数中。
函数的名字实际是看不见的,它仅仅是变量的名字,这个变量指代函数对象

复制代码 代码如下:

<script type=”text/javascript”>
     function square(x,y){
         return x*y;
     }
     var s = square; //s和square指代同一个函数
     square(2,3);//6
     s(2,4);//8
</script>

除了可以将函数赋值给变量,同样可以将函数赋值给对象的属性,当函数作为对象的属性调用时,函数就称为方法

复制代码 代码如下:

<script type=”text/javascript”>
     var obj = {square:function(x,y){ //对象直接量
         return x*y;
     }};
     var ect = obj.square(2,3);
</script>

prototype属性

每一个函数都包含prototype属性,这个属性指向一个对象的引用,这个对象称为原型对象。
详见:javascript学习笔记(五)原型和原型链

高阶函数

这里的高阶函数可不是高数里的那个高阶函数,所谓高阶函数就是操作函数的函数,它接收一个或多个函数作为参数,并返回新函数

jQuery提供了几个用于发送Ajax请求的函数. 其中最核心也是最复杂的是jQuery.ajax( options ),所有的其他Ajax函数都是它的一个简化调用. 当我们想要完全控制Ajax时可以使用此结果, 否则还是使用简化方法如get, post, load等更加方便. 所以jQuery.ajax( options ) 方法放到最后一个介绍. 先来介绍最简单的load方法: 1.  load( url, [data], [callback] ) Returns: jQuery包装集 说明: load方法能够载入远程 HTML 文件代码并插入至 DOM 中。 默认使用 GET 方式, 如果传递了data参数则使用Post方式. – 传递附加参数时自动转换为 POST 方式。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 “url #some > selector”, 默认的选择器是”body>*”. 讲解: load是最简单的Ajax函数, 但是使用具有局限性:    1. 它主要用于直接返回HTML的Ajax接口    2. load是一个jQuery包装集方法,需要在jQuery包装集上调用,并且会将返回的HTML加载到对象中, 即使设置了回调函数也还是会加载. 不过不可否认load接口设计巧妙并且使用简单.下面通过示例来演示Load接口的使用: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “; <html xmlns=”; <head>     <title>jQuery Ajax – Load</title>     <script type=”text/javascript” src=”../scripts/jquery-1.3.2-vsdoc2.js”></script>     <script type=”text/javascript”>         $(function()         {             $(“#btnAjaxGet”).click(function(event)             {                 //发送Get请求                 $(“#divResult”).load(“../data/AjaxGetMethod.aspx?param=btnAjaxGet_click” + “&timestamp=” + (new Date()).getTime());             });             $(“#btnAjaxPost”).click(function(event)             {                 //发送Post请求                 $(“#divResult”).load(“../data/AjaxGetMethod.aspx”, { “param”: “btnAjaxPost_click” });             });             $(“#btnAjaxCallBack”).click(function(event)             {                 //发送Post请求, 返回后执行回调函数.                 $(“#divResult”).load(“../data/AjaxGetMethod.aspx”, { “param”: “btnAjaxCallBack_click” }, function(responseText, textStatus, XMLHttpRequest)                 {                     responseText = ” Add in the CallBack Function! <br/>” + responseText                     $(“#divResult”).html(responseText); //或者: $(this).html(responseText);                 });             });             $(“#btnAjaxFiltHtml”).click(function(event)             {                 //发送Get请求, 从结果中过滤掉 “鞍山” 这一项                 $(“#divResult”).load(“../data/AjaxGetCityInfo.aspx?resultType=html” + “&timestamp=” + (new Date()).getTime() + ” ul>li:not(:contains(‘鞍山’))”);             });         })     </script> </head> <body>        <button id=”btnAjaxGet”>使用Load执行Get请求</button><br />     <button id=”btnAjaxPost”>使用Load执行Post请求</button><br />     <button id=”btnAjaxCallBack”>使用带有回调函数的Load方法</button><br />     <button id=”btnAjaxFiltHtml”>使用selector过滤返回的HTML内容</button>     <br />     <div id=”divResult”></div> </body> </html> 上面的示例演示了如何使用Load方法. 提示:我们要时刻注意浏览器缓存,  当使用GET方式时要添加时间戳参数 (net Date()).getTime() 来保证每次发送的URL不同, 可以避免浏览器缓存. 提示: 当在url参数后面添加了一个空格, 比如”  “的时候, 会出现”无法识别符号”的错误, 请求还是能正常发送. 但是无法加载HTML到DOM. 删除后问题解决. 2.jQuery.get( url, [data], [callback], [type] ) Returns: XMLHttpRequest 说明: 通过远程 HTTP GET 请求载入信息。 这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。 讲解: 此函数发送Get请求, 参数可以直接在url中拼接, 比如: $.get(“../data/AjaxGetMethod.aspx?param=btnAjaxGet_click”); 或者通过data参数传递: $.get(“../data/AjaxGetMethod.aspx”, { “param”: “btnAjaxGet2_click” }); 两种方式效果相同, data参数会自动添加到请求的url中 如果url中的某个参数, 又通过data参数传递, 不会自动合并相同名称的参数. 回调函数的签名如下: function (data, textStatus) {   // data could be xmlDoc, jsonObj, html, text, etc…   this; // the options for this ajax request } 其中data是返回的数据, testStatus表示状态码, 可能是如下值: “timeout”,”error”,”notmodified”,”success”,”parsererror” 在回调函数中的this是获取options对象的引用.有关options的各种说明, 请参见: type参数是指data数据的类型, 可能是下面的值: “xml”, “html”, “script”, “json”, “jsonp”,  “text”. 默认为”html”. jQuery.getJSON( url, [data], [callback] ) 方法就相当于 jQuery.get(url, [data],[callback],”json”) 3. jQuery.getJSON( url,  [data], [callback] ) Returns: XMLHttpRequest 相当于:   jQuery.get(url, [data],[callback], “json”) 说明: 通过 HTTP GET 请求载入 JSON 数据。 在 jQuery 1.2 中,您可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 “myurl?callback=?”。jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。 注意:此行以后的代码将在这个回调函数执行前执行。 讲解: getJSON函数仅仅将get函数的type参数设置为”JSON”而已. 在回调函数中获取的数据已经是按照JSON格式解析后的对象了: $.getJSON(“../data/AjaxGetCityInfo.aspx”, { “resultType”: “json” }, function(data, textStatus) {       alert(data.length);       alert(data[0].CityName); }); 服务器端返回的字符串如下: [{“”pkid””:””0997″”,””ProvinceId””:””XJ””,””CityName””:””阿克苏””,””CityNameEn””:””Akesu””,””PostCode””:””843000″”,””isHotCity””:false}, {“”pkid””:””0412″”,””ProvinceId””:””LN””,””CityName””:””鞍山””,””CityNameEn””:””Anshan””,””PostCode””:””114000″”,””isHotCity””:false}] 示例中我返回的饿是一个数组, 使用data.length可以获取数组的元素个数,  data[0]访问第一个元素, data[0].CityName访问第一个元素的CityName属性. 4.jQuery.getScript( url, [callback] ) Returns: XMLHttpRequest 相当于:   jQuery.get(url, null, [callback], “script”) 说明: 通过 HTTP GET 请求载入并执行一个 JavaScript 文件。 jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。 1.2中,您可以跨域调用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本,请加入延时函数。 讲解: 以前我使用dojo类库时官方默认的文件不支持跨域最后导致我放弃使用dojo(虽然在网上找到了可以跨域的版本, 但是感觉不够完美).  所以我特别对这个函数的核心实现和使用做了研究. 首先了解此函数的jQuery内部实现, 仍然使用get函数, jQuery所有的Ajax函数包括get最后都是用的是jQuery.ajax(), getScript将传入值为”script”的type参数,  最后在Ajax函数中对type为script的请求做了如下处理: var head = document.getElementsByTagName(“head”)[0];            var script = document.createElement(“script”); script.src = s.url; 上面的代码动态建立了一个script语句块, 并且将其加入到head中: head.appendChild(script); 当脚本加载完毕后, 再从head中删除:             // Handle Script loading             if ( !jsonp ) {                 var done = false;                 // Attach handlers for all browsers                 script.onload = script.onreadystatechange = function(){                     if ( !done && (!this.readyState ||                             this.readyState == “loaded” || this.readyState == “complete”) ) {                         done = true;                         success();                         complete();                         // Handle memory leak in IE                         script.onload = script.onreadystatechange = null;                         head.removeChild( script );                     }                 };             } 我主要测试了此函数的跨域访问和多浏览器支持.下面是结果: IE6 FireFox 注意事项 非跨域引用js 通过 通过 回调函数中的data和textStatus均可用 跨域引用js 通过 通过 回调函数中的data和textStatus均为undifined 下面是我关键的测试语句, 也用来演示如何使用getScript函数:             $(“#btnAjaxGetScript”).click(function(event)             {                 $.getScript(“../scripts/getScript.js”, function(data, textStatus)                 {                     alert(data);                     alert(textStatus);                     alert(this.url);                 });             });             $(“#btnAjaxGetScriptCross”).click(function(event)             {                 $.getScript(“”, function(data, textStatus)                 {                     alert(data);                     alert(textStatus);                     alert(this.url);                 });             }); 5. jQuery.post( url, [data], [callback], [type] ) Returns: XMLHttpRequest 说明: 通过远程 HTTP POST 请求载入信息。 这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。 讲解: 具体用法和get相同, 只是提交方式由”GET”改为”POST”. 6. jQuery.ajax( options ) Returns: XMLHttpRequest 说明: 通过 HTTP 请求加载远程数据。 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。 $.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。 $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。详细参数选项见下。 注意: 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 “text/xml”)。错误的 MIME 类型可能导致不可预知的错误。见 Specifying the Data Type for AJAX Requests 。 注意:如果dataType设置为”script”,那么所有的远程(不在同一域名下)的POST请求都将转化为GET请求。(因为将使用DOM的script标签来加载) jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 “jsonp” 时,jQuery 将自动调用回调函数。 讲解: 这是jQuery中Ajax的核心函数, 上面所有的发送Ajax请求的函数内部最后都会调用此函数.options参数支持很多参数, 使用这些参数可以完全控制ajax请求. 在Ajax回调函数中的this对象也是options对象. 因为平时使用最多的还是简化了的get和post函数, 所以在此不对options参数做详细讲解了. options参数文档请见: 五.Ajax相关函数. jQuery提供了一些相关函数能够辅助Ajax函数. 1. jQuery.ajaxSetup( options ) 无返回值 说明: 设置全局 AJAX 默认options选项。 讲解: 有时我们的希望设置页面上所有Ajax属性的默认行为.那么就可以使用此函数设置options选项, 此后所有的Ajax请求的默认options将被更改. options是一个对象, 可以设置的属性请此连接: 比如在页面加载时, 我使用下面的代码设置Ajax的默认option选项:             $.ajaxSetup({                 url: “../data/AjaxGetMethod.aspx”,                 data: { “param”: “ziqiu.zhang” },                 global: false,                 type: “POST”,                 success: function(data, textStatus) { $(“#divResult”).html(data); }             }); 上面的代码设置了一个Ajax请求需要的基本数据: 请求url, 参数, 请求类型, 成功后的回调函数. 此后我们可以使用无参数的get(), post()或者ajax()方法发送ajax请求.完整的示例代码如下: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “; <html xmlns=”; <head>     <title>jQuery Ajax – Load</title>     <script type=”text/javascript” src=”../scripts/jquery-1.3.2-vsdoc2.js”></script>     <script type=”text/javascript”>         $(document).ready(function()         {             $.ajaxSetup({                 url: “../data/AjaxGetMethod.aspx”,                 data: { “param”: “ziqiu.zhang” },                 global: false,                 type: “POST”,                 success: function(data, textStatus) { $(“#divResult”).html(data); }             });             $(“#btnAjax”).click(function(event) { $.ajax(); });             $(“#btnGet”).click(function(event) { $.get(); });             $(“#btnPost”).click(function(event) { $.post(); });             $(“#btnGet2”).click(function(event) { $.get(“../data/AjaxGetMethod.aspx”,{ “param”: “other” }); });         });     </script> </head>  <body>        <button id=”btnAjax”>不传递参数调用ajax()方法</button><br />     <button id=”btnGet”>不传递参数调用get()方法</button><br />     <button id=”btnPost”>不传递参数调用post()方法</button><br />     <button id=”btnGet2″>传递参数调用get()方法, 使用全局的默认回调函数</button><br />     <br />     <div id=”divResult”></div> </body> </html> 注意当使用get()或者post()方法时, 除了type参数将被重写为”GET”或者”POST”外, 其他参数只要不传递都是使用默认的全局option. 如果传递了某一个选项, 比如最后一个按钮传递了url和参数, 则本次调用会以传递的选项为准. 没有传递的选项比如回调函数还是会使用全局option设置值. 2.serialize( ) Returns: String 说明: 序列表表格内容为字符串,用于 Ajax 请求。 序列化最常用在将表单数据发送到服务器端时. 被序列化后的数据是标准格式, 可以被几乎所有的而服务器端支持. 为了尽可能正常工作, 要求被序列化的表单字段都有name属性, 只有一个eid是无法工作的. 像这样写name属性: <input id=”email” name=”email” type=”text” /> 讲解: serialize()函数将要发送给服务器的form中的表单对象拼接成一个字符串. 便于我们使用Ajax发送时获取表单数据. 这和一个From按照Get方式提交时, 自动将表单对象的名/值放到url上提交差不多. 比如这样一个表单: image 生成的字符串为:single=Single&param=Multiple&param=Multiple3&check=check2&radio=radio1 提示:代码见 chapter6/7-serialize.htm 3.serializeArray( ) Returns: Array<Object> 说明: 序列化表格元素 (类似 ‘.serialize()’ 方法) 返回 JSON 数据结构数据。 注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。 讲解: 看说明文档让我有所失望, 使用此函数获取到的是JSON对象, 但是jQuery中没有提供将JSON对象转化为JSON字符串的方法. 在JSON官网上没有找到合适的JSON编译器, 最后选用了jquery.json这个jQuery插件: 使用起来异常简单: var thing = {plugin: ‘jquery-json’, version: 1.3}; var encoded = $.toJSON(thing);              //'{“plugin”: “jquery-json”, “version”: 1.3}’ var name = $.evalJSON(encoded).plugin;      //”jquery-json” var version = $.evalJSON(encoded).version;  // 1.3 使用serializeArray( ) 再配合 $.toJSON 方法, 我们可以很方便的获取表单对象的JSON, 并且转换为JSON字符串: $(“#results”).html( $.toJSON( $(“form”).serializeArray() )); 结果为: [{“name”: “single”, “value”: “Single”}, {“name”: “param”, “value”: “Multiple”}, {“name”: “param”, “value”: “Multiple3”}, {“name”: “check”, “value”: “check2”}, {“name”: “radio”, “value”: “radio1”}] 全局Ajax事件 在jQuery.ajaxSetup( options ) 中的options参数属性中, 有一个global属性: global 类型:布尔值 默认值: true 说明:是否触发全局的Ajax事件. 这个属性用来设置是否触发全局的Ajax事件. 全局Ajax事件是一系列伴随Ajax请求发生的事件.主要有如下事件: 名称 说明 ajaxComplete( callback ) AJAX 请求完成时执行函数 ajaxError( callback ) AJAX 请求发生错误时执行函数 ajaxSend( callback ) AJAX 请求发送前执行函数 ajaxStart( callback ) AJAX 请求开始时执行函数 ajaxStop( callback ) AJAX 请求结束时执行函数 ajaxSuccess( callback ) AJAX 请求成功时执行函数 用一个示例讲解各个事件的触发顺序: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “; <html xmlns=”; <head>     <title>jQuery Ajax – AjaxEvent</title>     <script type=”text/javascript” src=”../scripts/jquery-1.3.2.min.js”></script>     <script type=”text/javascript”>         $(document).ready(function()         {             $(“#btnAjax”).bind(“click”, function(event)             {                 $.get(“../data/AjaxGetMethod.aspx”);             })             $(“#divResult”).ajaxComplete(function(evt, request, settings) { $(this).append(‘<div>ajaxComplete</div>’); })             $(“#divResult”).ajaxError(function(evt, request, settings) { $(this).append(‘<div>ajaxError</div>’); })             $(“#divResult”).ajaxSend(function(evt, request, settings) { $(this).append(‘<div>ajaxSend</div>’); })             $(“#divResult”).ajaxStart(function() { $(this).append(‘<div>ajaxStart</div>’); })             $(“#divResult”).ajaxStop(function() { $(this).append(‘<div>ajaxStop</div>’); })             $(“#divResult”).ajaxSuccess(function(evt, request, settings) { $(this).append(‘<div>ajaxSuccess</div>’); })         });     </script> </head> <body>      <br /><button id=”btnAjax”>发送Ajax请求</button><br/>   <div id=”divResult”></div> </body> </html> 结果如图: image 我们可以通过将默认options的global属性设置为false来取消全局Ajax事件的触发. 注意事项 如果在Get请求发送的url中有两个同名参数, 比如两个param参数: 使用服务器端方法获取param参数:         if (!String.IsNullOrEmpty(HttpContext.Current.Request[“Param”]))         {             param = HttpContext.Current.Request[“Param”];         } 此时获取到得param是一个用”,”分隔多个值的字符串: Multiple,Multiple3   总结 本文介绍如何使用jquery实现Ajax功能.  用于发送Ajax请求的相关函数如load, get, getJSON和post这些渐变Ajax方法, 对于核心的ajax 方法没有过多介绍, 主要是通过配置复杂的参数实现完全控制Ajax请求. 另外讲解了ajax的辅助函数比如用于序列化表单对象为字符串的serialize()方法, 用于将表单对象序列化为JSON对象的serializeArray()方法. 这些在使用脚本获取数据实现与服务器端交互是很有用, JSON格式的数据在处理大对象编程时将我们从混乱的属性字符串中解放出来. jQuery还提供录入全局ajax事件这一个特殊的事件, 并且可以在一个对象上设置这些事件, 在发送Ajax请求的各个生命周期上会调用这些事件, 可以通过修改默认的options对象的global属性打开或关闭全局事件. 目前本系列文章在加紧创作阶段. 所以代码和文章示例都没有来得及重新整理. 下面是本章的代码下载, 但是含有所有以前未整理的示例,请大家下载后看chapter6文件夹, 里面是本章的所有示例:


   
假设现在有表单test1和test2,分别表示调用表单和被调用表单,要实现参数的传递和返回,必须进行如下设置:

javascript中function是与Function还有就是new Object()函数都是什

1 function 是函数
2 JS里只有function Function是错误的
3
<body>
<script type =”text/javascript”>
var value=new Object(); //定义value为某个类里的一个实例
value.add=new Function(“a”,”b”,”return a+b”);
//add是value里的一个方法,他的值就是 return a+b
,也就是a和b的和,a和b应该是变量吧?怎么这样写?- – 感觉这里就错了
var result value.add(18,19);//这里定义了一个变量result,偶感觉应该是var
result=value.add(18,19),也好像不对。。。
document.write(resulf);
//输出result的结果,这里应该是document.write(result);
</script>
</body>

还有上面的Object是什么?没有这样的结构体的。。。自己定义下吧。。。

写个简单的,根本没必要那样写。。。没有类定义就乱来。。。。
<body>
<script type =”text/javascript”>
function add(int a,int b){return a+b;}
var value;
value=add(18,19);
document.write(result);
</script>
</body>

这么几句话就OK
 

        

javascript 里 function() {函数名();} 这种写法是什

一个函数调用另一个函数,这有什么啊?就是这个函数中调用了另一个函数而已。函数定义注意一下,无名函数如果不立即执行是不会进行调用的!
 

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。 Jscript
支持两…

被调用表单test2的属性设置

对象

属性

frmtest2

windowstype

1

 

lcstr

” “(自定义属性)

cmdset

caption

设置返回值

 frmtest2表单的init事件代码如下(用于接收数据):

          Lparameters lcstr

         this.text1.value=lcstr

        this.lcstr=lcstr

cmdset按钮的click事件代码如下(用于修改传递参数,设置返回值):

       thisform.lcstr=thisform.text1.value

frmtest2表单的unload事件代码如下(用于返回数据):

  return thisform.lcstr

 

调用表单test1的设置

对象

属性

text1

value

123456

cmdset

caption

调用表单

 

cmdset按纽的click事件代码(用于参数的传递与返回):

local lcstr

do form test2 to lcstr with thisform.text1.value 
&&(lcstr=>返回的参数  thisform.text1.value=>传递的参数)

thisform.caption=lcstr

 

 

 

转自