Ajax.NET中的ajax.js腳本

這是由
<script language="javascript" src="ajax/common.ashx"></script>
這一行請求所生成的腳本文件.該文件作爲程序集的資源嵌入到程序集中.

<script src="ajax/common.ashx" language="javascript" type="text/javascript"></script>
var requests = new Array();

if(typeof(XMLHttpRequest) == 'undefined')
var XMLHttpRequest = function()
{
    
var request = null;
    
try
    
{
        request 
= new ActiveXObject('Msxml2.XMLHTTP');
    }

    
catch(e)
    
{
        
try
        
{
            request 
= new ActiveXObject('Microsoft.XMLHTTP');
        }

        
catch(ee)
        
{}
    }

    
return request;
}


function ajax_stop()
{
    
for(var i=0; i<requests.length; i++)
    
{
        
if(requests[i] != null)
            requests[i].abort();
    }

}


function ajax_create_request(context)
{
    
for(var i=0; i<requests.length; i++)
    
{
        
if(requests[i].readyState == 4)
        
{
            requests[i].abort();
            requests[i].context 
= context;
            
return requests[i];
        }

    }


    
var pos = requests.length;
    
    requests[pos] 
= Object();
    requests[pos].obj 
= new XMLHttpRequest();
    requests[pos].context 
= context;
    
    
return requests[pos];
}


function ajax_request(url, data, callback, context)
{
    
var request = ajax_create_request(context);
    
var async = typeof(callback) == 'function';

    
if(async) request.obj.onreadystatechange = function()
    
{
        
if(request.obj.readyState == 4)
            callback(
new ajax_response(request));
    }

    
    request.obj.open(
'POST', url, async);
    request.obj.send(data);
    
    
if(!async)
        
return new ajax_response(request);
}


function ajax_response(request)
{
    
this.request = request.obj;
    
this.error = null;
    
this.value = null;
    
this.context = request.context;
    
    
if(request.obj.status == 200)
    
{
        
try
        
{
            
this.value = object_from_json(request);
            
            
if(this.value && this.value.error)
            
{
                
this.error = this.value.error;
                
this.value = null;
            }

        }

        
catch(e)
        
{
            
this.error = new ajax_error(e.name, e.description, e.number);
        }

    }

    
else
    
{
        
this.error = new ajax_error('HTTP request failed with status: ' + request.obj.status, request.obj.status);
    }

    
    
return this;
}


function enc(s)
{
    
return s == null ? null : s.toString().replace(/%/g, "%26").replace(/=/g, "%3D");
}


function object_from_json(request)
{
    
if(request.obj.responseXML != null && request.obj.responseXML.xml != null && request.obj.responseXML.xml != '')
        
return request.obj.responseXML;
    
    
var r = null;    
    eval(
'r=' + request.obj.responseText + ';');
    
return r;
}


function ajax_error(name, description, number)
{
    
this.name = name;
    
this.description = description;
    
this.number = number;

    
return this;
}


ajax_error.prototype.toString 
= function()
{
    
return this.name + " " + this.description;
}


function json_from_object(o)
{
    
if(o == null)
        
return 'null';

    
switch(typeof(o))
    
{
        
case 'object':
            
if(o.constructor == Array)        // checks if it is an array [,,,]
            {
                
var s = '';
                
for(var i=0; i<o.length; ++i)
                
{
                    s 
+= json_from_object(o[i]);

                    
if(i < o.length -1)
                        s 
+= ',';
                }


                
return '[' + s + ']';
            }

            
break;
        
case 'string':
            
return '"' + o.replace(/(["/])/g, '/$1') + '"';
        default:
            return String(o);
    }
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章