首页
学习
活动
专区
圈层
工具
发布

JSONP问题
EN

Stack Overflow用户
提问于 2014-01-06 08:54:43
回答 2查看 79关注 0票数 0

我正在编写一些使用jQuery进行webservice调用的javascript。

  • webservice是我编写的(用C#编写的)服务,所以我可以完全控制它。
  • webservice正在向数据库中写入一些值。
  • web服务与网站不在同一域中。
  • web服务接受一个包含要提交的所有值的JSON.stringified参数。

我有几个问题:

  1. 如果webservice抛出一个异常(例如,主键约束),这会导致jQuery Ajax异常吗?
  2. 如果我想返回一个值,比如受影响的行数,是否必须使用JSONP (因为它是跨域的)?

更新:我必须支持IE8,所以CORS不是一个选项。感谢@Volodymyr和@mcv指出了该选项

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-06 10:09:31

  1. 这取决于它是如何在c#中完成的,如果它抛出异常和响应代码不会是200,那么是的,那么jquery中就会有错误,您可以为错误添加事件,如果c#不抛出异常,那么它将是jquery上的成功事件,但是您可能会得到不同的状态响应json。既然你有完全的控制权,那么你就可以做你想做的事。
  2. 不过,如果你有控制,你可以做以下工作 公共类AllowCrossSiteAttribute : ActionFilterAttribute {公共覆盖无效OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { if (actionExecutedContext.Response != null) {HttpActionExecutedContext“*”;base.OnActionExecuted(actionExecutedContext);}}

将此添加到代码中(请不要在这里允许所有域,但可以将"*“替换为域列表),然后在web api控制器上添加此属性

或者使用web配置

代码语言:javascript
复制
<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
票数 1
EN

Stack Overflow用户

发布于 2014-01-06 09:08:37

  1. 如果Ajax调用从服务器获得错误代码,则将调用error()回调而不是success()回调。根据服务器端框架的不同,您可能能够在那里捕获异常,并且仍然可以传递一些有关错误的有用数据以及http错误代码。但是如果您不处理它,Ajax调用可能会收到一堆无用的带有错误代码的HTML。无论您做什么,请确保在发生错误时发送错误代码。
  2. 在旧的浏览器上,是的。但是您无法使用jsonp发布文章,所以您的所有数据都必须放在请求参数中。如果您只关心现代浏览器,更好的解决方案是在服务器响应中设置Access-Control-Allow-Origin头。有关更多信息,请参见How does Access-Control-Allow-Origin header work?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20946231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档