2011-08-01 127 views
0

我有一个HTML和JavaScript文件设置为从启用JSONP的Web服务中检索数据。我的问题是,当我将html和.js文件部署到运行服务的目录时,它将执行得很好,但如果我尝试从另一个主机运行html和.js文件,则该请求不会使它Web服务和Java脚本给我一个服务器500错误。IIS配置允许来自JavaScript文件的跨域JSONP请求

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

我已经做了相当多的研究,发现我需要将响应类型设置为json并将usehttpget设置为true的脚本方法标记集,我也完成了这两件事正如尝试在另一篇文章中提到的那样在项目中设置clientaccesspolicy.xml。一切都无济于事。

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

这怎么解决?

编辑 我还发现一个帖子说,500错误是基于请求大小,所以我说 < jsonSerialization maxJsonLength =“5000000” /> 到我的web.config中没有任何帮助。

回答

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) 

然后,服务器使用回调查询字符串参数来包装它的响应在functioncall,像这样:

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

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

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

+0

xmlhttprequest只是Chrome Java Script调试器的一部分,它允许我查看JSON格式的响应。我现在通过实现一个我最初在互联网上找到的类的版本,然后发现编写java脚本的组似乎也已经被使用了。 我正在使用的代码是基于JsonHttpModule类找到本文中的一半左右[来自CodeProject](http://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx) 我不得不将其转换为VB ...但我现在的问题是,我得到多个JQUERY标签。 – jnusz

+0

空间不足...下面是我的回复示例: jQuery1620976034790975973_1312299185126(jQuery1620976034790975973_1312299185126(); jQuery1620976034790975973_1312299185126({“d”:{“__ type”:“OrionNetWebServices。CIPadResponse + CValidateTDACResponse“,”Success“:false,”CenterName“:”“,”FirstName“:”“,”LastName“:”“,”ErrorMessage“:”无法验证临时设备激活。遇到未知错误。请联系OrionNet Systems以获得进一步的帮助。“,”ErrorAction“:”none“}}); jQuery1620976034790975973_1312299185126();); 任何帮助,为什么我得到额外的,将不胜感激 – jnusz

+0

好吧,我觉得像一个白痴为我的最后2个职位。我发现的问题,这是我试图实现响应过滤器的一种方式,然后另一种。问题是,我没有拿出我的web.config引用从我的第一种方式在我的iis的根目录web.config。@AHM,谢谢你的帮助。 – jnusz