您的位置:资讯频道 > 技术文档 > Java组件开发

Ajax有条件的跨域访问

来源:CSDN   作者:jinkun Shen   时间:2008-06-13  点击:262 次
有网友说通过Iframe等一系列操作能实现Ajax的跨域操作,可惜我都没测试成功,可能我太笨了,先敲下自己。前不久帮人搞sina的股票实时图,我去查看了sina的源代码,顺便扣了下来,经自己的改造成了如下形式:

view plaincopy to clipboardprint?
if(document.getElementById('MyScript')){

  document.body.removeChild(document.getElementById('MyScript'));

}

var element = document.createElement("script");

element.id='MyScript';

element.type = "text/javascript";

element.charset = "gb2312";



if(typeid==0){

  element.src = "http://hq.sinajs.cn/rn=" + (new Date()).getTime() + "&list=s_sh000001";

}else if(typeid==1){

  element.src = "http://hq.sinajs.cn/rn=" + (new Date()).getTime() + "&list=s_sz399001";

}



element[document.all ? "onreadystatechange" : "onload"] = function () {

  if (document.all && this.readyState != "loaded" && this.readyState != "complete") {

    return;

  }

  var Stock;

  if (window["hq_str_s_sh000001"] && typeid==0){

    Stock=window["hq_str_s_sh000001"].split(',');

  }else if(window["hq_str_s_sz399001"] && typeid!=0){

    Stock=window["hq_str_s_sz399001"].split(',');

  }

  if(Stock.length>0){

    CurStock.sum_name=Stock[0];

    CurStock.sum_curNum=Stock[1];

    CurStock.sum_chanRate=Stock[3];

  }

  CurStock.picurl=getImage(typeid);

  WriteStock();

}

document.body.appendChild(element);

if(document.getElementById('MyScript')){

  document.body.removeChild(document.getElementById('MyScript'));

}

var element = document.createElement("script");

element.id='MyScript';

element.type = "text/javascript";

element.charset = "gb2312";



if(typeid==0){

  element.src = "http://hq.sinajs.cn/rn=" + (new Date()).getTime() + "&list=s_sh000001";

}else if(typeid==1){

  element.src = "http://hq.sinajs.cn/rn=" + (new Date()).getTime() + "&list=s_sz399001";

}



element[document.all ? "onreadystatechange" : "onload"] = function () {

  if (document.all && this.readyState != "loaded" && this.readyState != "complete") {

    return;

  }

  var Stock;

  if (window["hq_str_s_sh000001"] && typeid==0){

    Stock=window["hq_str_s_sh000001"].split(',');

  }else if(window["hq_str_s_sz399001"] && typeid!=0){

    Stock=window["hq_str_s_sz399001"].split(',');

  }

  if(Stock.length>0){

    CurStock.sum_name=Stock[0];

    CurStock.sum_curNum=Stock[1];

    CurStock.sum_chanRate=Stock[3];

  }

  CurStock.picurl=getImage(typeid);

  WriteStock();

}

document.body.appendChild(element);

这样子实际上是跨域去访问了sina的http://hq.sinajs.cn/,我们再看看http://hq.sinajs.cn/ 页面

view plaincopy to clipboardprint?
var hq_str_s_sh000001="上证指数,2961.588,-62.652,-2.07,454324,5217669";

var hq_str_s_sh000001="上证指数,2961.588,-62.652,-2.07,454324,5217669";

就是一段javascript代码,当然是动态生成的。

既然这样,我们在Ajax中也应该可以这么去做,从而达到跨域访问;条件是访问页面必须是javascript格式