IIS配置允许来自JavaScript文件的跨域JSONP请求

时间:2011-08-01 21:24:31

标签: iis cross-domain jsonp cross-domain-policy

我设置了一个HTML和JavaScript文件,用于从支持JSONP的Web服务中检索数据。我的问题是,当我将html和.js文件部署到运行该服务的目录时,它将执行正常,但如果我尝试从另一个主机运行html和.js文件,请求不会使它Web服务和java脚本给我一个服务器500错误。

我正在使用Chrome的开发者工具查看xmlhttprequest调用,这是我知道我收到500错误的唯一原因。

我已经做了很多研究,发现我需要设置脚本方法标记,响应类型设置为json,usehttpget设置为true,我做了这两件事,以及尝试在另一篇文章中提到的项目中设置clientaccesspolicy.xml。一切都无济于事。

我确定这是Web服务或IIS端的配置问题,因为当我将html和javascript文件放在我的代码目录中并通过IDE运行Web服务时,我可以使用该实例html调用Web服务,我的回复很好。但是如果html和javascript不在正在运行的代码的工作目录中,我会收到服务器错误500.

如何解决这个问题?

修改的 我还发现一篇帖子说500错误是基于请求大小所以我补充说 < jsonSerialization maxJsonLength =“5000000”/> 到我的web.config没有帮助。

1 个答案:

答案 0 :(得分:0)

我对IIS配置知之甚少,但如果您尝试使用JSONP来解决跨域问题,那么您不应该看到XMLHttpRequest。 JSONP的工作方式是使用您要调用的URL注入脚本标记:

var tag = document.createElement("script")
tag.src = "http://someurl.example.com?args=42&callback=wrapperFunction"
document.body.appendChild(tag)

服务器然后使用callback querystring参数将它的响应包装在一个函数调用中,如下所示:

wrapperFunction({some: 'response', arg: 42});

这样做的原因是脚本标签不必遵循跨域策略,因此如果您不这样做,那么您不使用JSONP并且必须遵守跨域规则

我很抱歉,如果这确实是IIS配置的问题,我刚刚看到与JSONP一起提到的XMLHttpRequest,并且认为“嘿,那是错的!”。我希望它有用,否则只是忽视它: - )