Решите проблему междоменного доступа Ajax, сообщающего об отсутствии разрешений. Друзья, нуждающиеся в помощи, могут обратиться к нему. smart.asp
Скопируйте код кода следующим образом:
<язык сценария=jscript runat=сервер>
/*
Метод вызова в VBS
тусклый мойhttp
set myhttp = SmartHttp(url,method,data); //Все три параметра являются необязательными;
свойство:
url: строка, запрошенный URL-адрес.
метод: строка, запрошенный метод
данные: строка, запрошенные данные
charset: строка, кодировка данных, возвращаемых запрошенным URL.
status: Int, код состояния, возвращаемый запросом
ReadyState: Int, текущий статус связи с HTTP-запросом, 1, 2, 3, 4.
набор данных: объект, запрошенные данные. Если добавлено, эта часть данных будет добавлена к атрибуту данных.
свойства набора данных:
charset: строка, кодировка отправляемых данных
метод набора данных:
add(key,value,noencode): добавить данные
Remove(key): удалить элемент данных
isexists(key): определить, существует ли элемент данных.
Очистить: очистить все элементы данных.
метод:
header(headstr): установите заголовок запроса, разделите элементы и значения с помощью:
timeout(t1,t2,t3,t4): установите время таймаута.
send(): отправить запрос
getbinary: получить двоичные данные, возвращаемые сервером.
gettext(charset): Получить текст указанной кодировки.
getjson(charset): получить данные json указанной кодировки.
getheader(key): Получить заголовок ответа, возвращенный сервером.
getxml(charset): Получить XML-данные указанной кодировки.
*/
функция SmartHttp(url,метод,данные){
вернуть новый _SmartHttp (url, метод, данные);
}
функция _SmartHttp(url,метод,данные){
если (метод типа == неопределенный) метод = GET;
если (тип данных == неопределенный) данные =;
метод = метод.toUpperCase();
метод = метод!=POST ? GET : POST;
this.timeout=[10000,10000,10000,10000];
этот.метод = метод;
this.url=url;
this.data=данные;
this.charset=gb2312;
this.http=null;
this.headers=[];
это.статус = 0;
this.readyState=0;
this.content=null;
это.msg=;
this.dataset={
кодировка: gb2312,
данные:[],
добавить: функция (ключ, значение, noencode) {
вар фн = ноль;
if(this.charset.toLowerCase()==utf-8){fn = encodeURIComponent;}else{fn = escape;}
if(noencode==true){fn=function(_str){return _str;}}
this.data.push({ключ:fn(ключ),значение:fn(значение)});
},
удалить: функция (ключ) {
if(this.data.length<=0) возвращает false;
вар _data=[];
for(var i=0;i<this.data.length;i++){
если(this.data[i].key!=ключ){
_data.push(this.data[i]);
}
}
this.data = _data;
},
isexists: функция (ключ) {
if(this.data.length<=0) возвращает false;
for(var i=0;i<this.data.length;i++){
if(this.data[i].key==ключ){
вернуть истину;
}
}
вернуть ложь;
},
ясно: функция() {
this.dataset.data=[];
}
};
}
_SmartHttp.prototype.init=функция(){
вар datasetstr =;
если(this.dataset.data.length>0){
for(var i=0;i<this.dataset.data.length;i++){
datasetstr += this.dataset.data[i].key + = + this.dataset.data[i].value + &;
}
}
if(datasetstr!=) datasetstr = datasetstr.substr(0,datasetstr.length-1);
if(this.data==){this.data = datasetstr;}else{if(datasetstr!=)this.data+= & + datasetstr;}
если (this.data==)this.data=null;
//this.url += ((this.url.indexOf(?)<0) ? ? : &) + jornd= + this.getrnd();
if(this.method==GET && this.data!=null) this.url += & + this.data;
if(this.method==POST) this.headers.push(Content-Type:application/x-www-form-urlencoded);
if(!this.charset || this.charset==) this.charset = gb2312;
};
_SmartHttp.prototype.header=функция(headstr){
if(headstr.indexOf(:)>=0) this.headers.push(headstr);
верните это;
};
_SmartHttp.prototype.timeout=функция(){
if(arguments.length>4){вернуть это;}
for(var i =0;i<arguments.length;i++){
if(!isNaN(аргументы[i])){
this.timeout[i] = parseInt(arguments[i]);
}
}
верните это;
};
_SmartHttp.prototype.send=функция(){
это.инит();
вар _http = this.getobj();
if(_http==null){верните это;}
пытаться{
_http.setTimeouts(this.timeout[0], this.timeout[1], this.timeout[2], this.timeout[3]);
}поймать(бывший){}
_http.open(this.method,this.url,false);
если(this.headers.length>0){
for(var i=0;i<this.headers.length;i++){
вар Sindex = this.headers[i].indexOf(:);
ключ var = this.headers[i].substr(0,Sindex);
значение var = this.headers[i].substr(Sindex+1);
_http.setRequestHeader(ключ,значение);
}
}
_http.send(this.data);
this.readyState = _http.readyState;
если(_http.readyState==4){
this.status = parseInt(_http.status);
это.http = _http;
this.content = _http.responseBody;
}
верните это;
}
_SmartHttp.prototype.getbinary=function(){
вернуть этот.контент;
};
_SmartHttp.prototype.gettext=функция(кодировка){
пытаться{
вернуть this.b2s(this.content,charset? charset: this.charset);
}поймать(бывший){
this.msg = ex.description;
возвращаться ;
}
};
_SmartHttp.prototype.getjson=функция(кодировка){
пытаться{
вар _json = ноль;
eval(_json=( + this.gettext(charset) + ););
вернуть _json;
}поймать(бывший){
this.msg = ex.description;
вернуть ноль;
}
};
_SmartHttp.prototype.getheader=функция(ключ){
если (ключ) {
if(key.toUpperCase()==SET-COOKIE){
ключ = key.replace(-,/-);
var headers = this.http.getAllResponseHeaders();
var regexp = new RegExp(/n + key + /:(.+?)/r,ig);
вар рестр = ;
while((res = regexp.exec(headers))!=null){
вар val = res[1].trim();
resstr = resstr + val.substr(0,val.indexOf(;)) + ;
}
если(ressstr!=){
resstr = resstr.substr(0,resstr.lastIndexOf(;));
}
вернуть ресстр;
}еще{
верните this.http.getResponseHeader(ключ);
}
}else{вернуть this.http.getAllResponseHeaders();}
};
_SmartHttp.prototype.getxml=функция(кодировка){
пытаться{
вар _dom = новый ActiveXObject(MSXML2.DOMDocument);
_dom.loadXML(this.gettext(кодировка));
вернуть _дом;
}поймать(бывший){
this.msg = ex.description;
вернуть ноль;
}
};
_SmartHttp.prototype.getobj = функция (){
вар б = ноль;
вар httplist = [MSXML2.serverXMLHttp.3.0,MSXML2.serverXMLHttp,MSXML2.XMLHttp.3.0,MSXML2.XMLHttp,Microsoft.XMLHttp];
for(var i = 0;i<=httplist.length -1;i++){
пытаться{
б = новый ActiveXObject(httplist[i]);
(функция(о){
_SmartHttp.prototype.getobj = function(){вернуть новый ActiveXObject(o)};
})(httplist[i]);
вернуть б;
}поймать(бывший){
eval(this.msg = ex.description;);
}
}
вернуть б;
};
_SmartHttp.prototype.getrnd = function (){return Math.random().toString().substr(2);};
_SmartHttp.prototype.b2s = function(bytSource, Cset){ //ef bb bf,c0 fd
вар Objstream, c1, c2, c3;
вар байт;
Objstream =Server.CreateObject(ADODB.Stream);
Объектный поток.Тип = 1;
Объектный поток.Режим = 3;
Объектный поток.Открыть();
Objstream.Write(bytSource);
Объектный поток.Позиция = 0;
Объектный поток.Тип = 2;
Objstream.CharSet = Cset;
байты = Objstream.ReadText();
Объектный поток.Закрыть();
Обжпоток = ноль;
вернуть байты;
};
_SmartHttp.prototype.urlencode=function(str){ return encodeURIComponent(str);};
_SmartHttp.prototype.urldecode=function(str){ return decodeURIComponent(str);};
String.prototype.trim = function(){return this.replace(/(^(/s+)|(/s+)$)/igm,);};
</скрипт>
Используйте код:
Скопируйте код кода следующим образом:
<!--#include file=smart.asp-->
<%
Response.charset=utf-8
dim URL, метод, данные, кодировка
URL =Request.Form(targeturl)
метод =Request.Form(метод)
данные =Request.Form(данные)
кодировка = Request.Form(кодировка)
если кодировка = тогда кодировка = GB2312
ответ. Напишите SmartHttp(url, метод, данные). send().gettext(кодировка)
установите myhttp = ничего
%>