ajax跨域请求问题解决方案(2)

日期:2009-02-25    阅读:427   分类:Javascript


var proxy = {};

/*@资源地址*/
proxy.url = null;

/*@数据对象*/
proxy.data = null;

/*@脚本对象*/
proxy.script = null;

/*@创建对象*/
proxy.create = function(){
    proxy.script = document.createElement("script");
    proxy.script.type = "text/javascript";
    document.getElementsByTagName("head")[0].appendChild(proxy.script);
};

/*@打开连接*/
proxy.request = function(url ,CallBack ,charset){
    proxy.script.src = url;
    proxy.url = url;
proxy.script.setAttribute("charset" ,charset);
    if (document.all)
    {
        proxy.script.onreadystatechange = function(){
             if (proxy.script.readyState == "loaded" || 
proxy.script.readyState
== "complete") { CallBack(proxy.data); } }; } else { proxy.script.onload = function (){ CallBack(proxy.data); }; } }; /*@添加监听*/ proxy.addEventHandler = function(target, eventType, handler){ if (target.addEventListener) { target.addEventListener(eventType, handler, false); } else if (target.attachEvent) { target.attachEvent("on" + eventType, handler); } else { target["on" + eventType] = handler; } }; proxy.addEventHandler(window ,"load" ,proxy.create);
为了实现跨域提交,我们还需要相关服务来支持,及返回什么格式的信息,接收什么样的数据。

比如这里约定为服务器端返回数据格式为:
proxy.data = {
errCode:1 ,
description:"用户名格式错误"
};
那么调用我们就可以使用:
proxy.request("data.js" ,function(data){
alert(data.errCode);
alert(data.description);
});

这里的data.js就相当于一个server端的服务,真正使用的时候会传相关的参数进去,返回的结果同统一的 proxy.data = {***}这样的,proxy.data为一个json object。

本页链接: http://www.scriptlover.com/static/456-javascript-ajax-跨域

标签:

相关文章

网友评论

#1: 2009-2-25 18:31:00 by 小淡



发现用script方式动态load脚本在safari下还有个bug.

比如当页面编码为utf-8的时候,那么得到的返回结果即:proxy.data.description 中的汉字为乱码,因此做了下处理.

为script标签加上charset属性为utf-8即可解决.

这里的charset属性是要和调用页面的编码一致.

#2: 2009-9-18 1:32:00 by zhaeng11

zhangheng

Leave a comment

 required

 required (Not published)

 required