PDA

View Full Version : AJAX的中的跨域访问问题


forcewind
02-07-08, 10:36 AM
case "DocumentFinishRead":
//调用Ajax提交阅毕通知,并关闭
document.domain = "**.gov.cn"//跨域
var strURL =window.location.href;
var i = strURL.indexOf(".nsf");
strURL = window.location.href.substring(0,i+4) + '/(GlobalDocumentManage)?OpenAgent&OpenerDocIDOS=' + document.all.CurrentDocIDOS.value + '&CurrentActionOS=DocumentFinishRead&CurrentUserOS=' + document.all.CurrentUserOS.value + '&'
var xmlUrl=new ActiveXObject("Microsoft.XMLHTTP");
xmlUrl.Open("GET",strURL);
xmlUrl.setrequestheader("content-type","application/x-www-form-urlencoded");
xmlUrl.onreadystatechange = function(){
if (xmlUrl.readyState == 4 && xmlUrl.status == 200){
window.opener.location.reload()
window.close()
}
}
xmlUrl.Send();
break;

有这样一个问题,A服务器上是集中一块待办事宜,其他各个服务器的应用都可以通过A上的待办事宜连接。 这段是解决跨域访问的问题document.domain = "**.gov.cn"//跨域,问题是如果加上去这段代码,在本服务器上的DocumentFinishRead按钮就会出没有权限访问的AJAX错误,去掉这段代码,跨域访问的就不行了,不能两全其美,不知道有那位高手有办法解决吗?

sdlfly2000
02-07-08, 05:21 PM
看不出什么问题,

你的程序停在哪里?

forcewind
02-07-08, 05:58 PM
就停在点击阅毕的时候,JAVASCRIPT出错,说没有权限,加上去,本地点击阅毕就无权限,去掉的话待办事宜里点击阅毕就出错。主要是在不同服务器造成的,不知道怎么判断何时能加上去这个,没有找到一个区别两种情况的标示符。有的话就可以通过判断加这个了“document.domain = "**.gov.cn"//跨域”

sdlfly2000
02-07-08, 07:41 PM
我发现这个代码里有几个问题:

1. 你用document.domain = "**.gov.cn"。我建议你看看这个domain是不是可以改写,因为我查得的资料上说,这个是个只读属性。

2. 你在ajax的调用集中在这么一句上:

strURL = window.location.href.substring(0,i+4) + '/(GlobalDocumentManage)?OpenAgent&OpenerDocIDOS=' + document.all.CurrentDocIDOS.value + '&CurrentActionOS=DocumentFinishRead&CurrentUserOS=' + document.all.CurrentUserOS.value + '&'

这里清楚显示你要调用的agent在本地nsf上,并没有你说的跨域啊

可能是我还没有了解的你的意思。

forcewind
02-07-08, 09:51 PM
1。这个值可以零时强行改变,其中道理也不是很懂。
2。本地代理里面当然可以取得其他服务器的文档,并且对它操作。
估计这个只有具体碰到过才能体会。这里也很难说清楚。

sdlfly2000
03-07-08, 12:13 PM
agent是可以访其他域的nsf,可是现在你贴出来的代码只是调用了一个本NSF agent的一个ajax,

所以我觉得真正的问题出现在你调用的那个agent身上。

你方便的话可以把agent的代码贴出来。

yinkehao
18-07-08, 09:48 AM
我发现这个代码里有几个问题:

2. 你在ajax的调用集中在这么一句上:

strURL = window.location.href.substring(0,i+4) + '/(GlobalDocumentManage)?OpenAgent&OpenerDocIDOS=' + document.all.CurrentDocIDOS.value + '&CurrentActionOS=DocumentFinishRead&CurrentUserOS=' + document.all.CurrentUserOS.value + '&'

这里清楚显示你要调用的agent在本地nsf上,并没有你说的跨域啊

可能是我还没有了解的你的意思。
从你的URL来看, 很显然,你并没有跨域访问。

骏之城
23-07-08, 12:39 PM
楼主可以试试不用ajax异步调用,直接window.open(strURL)看看是什么返回结果?

rainbow720
01-09-08, 10:41 AM
ajax代码中并没有跨域访问啊,可能是你调的代理没有权限访问其他域中的数据库,能否将代理的代码页贴上来。