【问题标题】:IIS Configuration to allow cross domain JSONP requests from a JavaScript fileIIS 配置以允许来自 JavaScript 文件的跨域 JSONP 请求
【发布时间】:2011-10-17 19:02:33
【问题描述】:

我设置了一个 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 错误是基于请求大小,所以我添加了 对我的 web.config 没有帮助。

【问题讨论】:

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


    【解决方案1】:

    我对 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 一起被提及,并说“嘿,那错了!”。我希望它有帮助,否则请忽略它:-)

    【讨论】:

    • xmlhttprequest 只是 Chrome Java 脚本调试器的一部分,它允许我查看 JSON 格式的响应。实际上,我现在通过实现我最初在 Internet 上找到的类的一个版本来使其工作,后来发现编写 java 脚本的组似乎也使用过。我正在使用的代码是基于在这篇文章的一半处找到的 JsonHttpModule 类From CodeProject 我确实必须将它转换为 VB ......但我现在的问题是我得到了多个 JQUERY 标签。跨度>
    • 跑出空位...这里是我的响应的采样:jQuery1620976034790975973_1312299185126(jQuery1620976034790975973_1312299185126(); jQuery1620976034790975973_1312299185126({ “d”:{ “__类型”: “+ OrionNetWebServices.CIPadResponse CValidateTDACResponse”,“成功":false,"CenterName":"","FirstName":"","LastName":"","ErrorMessage":"无法验证临时设备激活。遇到未知错误。请联系 OrionNet Systems 获取更多信息帮助。","ErrorAction":"none"}});jQuery1620976034790975973_1312299185126(););任何关于为什么我得到额外的帮助将不胜感激。
    • 好吧,我觉得我最近的 2 个帖子像个白痴。我发现了问题,这是我试图以一种方式实现响应过滤器,然后是另一种方式。问题是我没有从 iis 根目录中的 web.config 中取出第一种方式的 web.config 引用。 @AHM,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2020-07-22
    • 2012-11-03
    • 2013-09-13
    • 2015-10-11
    • 2016-03-03
    • 2012-08-01
    相关资源
    最近更新 更多