0

我设置了一个 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 实例来调用网络服务,我的反应很好。但如果 html 和 javascript 不在正在运行的代码的工作目录中,我会收到服务器错误 500。

如何解决?

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

4

1 回答 1

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)

然后服务器使用回调查询字符串参数将其响应包装在函数调用中,如下所示:

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

这样做的原因是 script-tags 不必遵循跨域策略,所以如果你不这样做,那么你就没有使用 JSONP,你必须遵守跨域规则。

如果这确实是 IIS 配置的问题,我深表歉意,我刚刚看到 XMLHttpRequest 与 JSONP 一起被提及,并说“嘿,那错了!”。我希望它会有所帮助,否则请忽略它:-)

于 2011-08-01T22:49:29.863 回答