【问题标题】:Comsuming RESTful service in javascript在 javascript 中使用 RESTful 服务
【发布时间】:2012-09-12 15:03:56
【问题描述】:

我正在尝试使用我新设置的 RESTful WCF 服务,该服务位于

[http://196.34.92.60/api/api/v1/public.svc/getoperators]

我使用一些第三方工具访问它,我从这些工具中获取

http://code.google.com/a/eclipselabs.org/p/restclient-tool/

https://addons.mozilla.org/en-US/firefox/addon/restclient/

我的结果和我预期的一样:

{
   "Results":
   [
       "golden arrow",
       "jammie",
       "myciti"
   ]
}

一切顺利。当我只是在我的网络浏览器中输入 url 时,响应是

<ResultList xmlns="http://schemas.datacontract.org/2004/07/Developer_Portal"xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Results xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"><a:string>golden arrow</a:string><a:string>jammie</a:string><a:string>myciti</a:string></Results></ResultList>

不是我的预期,但我认为这是正常的,并尝试在 Javascript 中使用服务(这里是小提琴)

http://jsfiddle.net/JmTe4/11/

它以错误响应。在这一点上,我很难过:我需要做什么才能在 javascript 中获得所需的响应?

【问题讨论】:

  • 只能调用JS来自的域,防止XSS。例如。位于 jsfiddle.net 上的脚本将不允许调用您的域/IP。
  • 两件事:1)同源策略,2)“接受”请求头告诉服务器它应该返回什么格式。
  • 我刚刚从本地 html 页面尝试了相同的 javascript,并将行 Accepts: "application/json" 添加到第 16 行的 ajax 请求中。这似乎没有任何区别。

标签: json wcf rest jsonp


【解决方案1】:

几件事。其中一些已被其他成员提及。

  1. 通过 XMLHttpRequest 的 AJAX 调用不能跨域工作。换句话说,您的 AJAX 代码无法从 jsfiddle.net 调用 196.34.92.60。它们是不同的域。
  2. 您的浏览器正在返回 XML,因为它正在发送“Accepts: text\html”作为标题。 jQuery 将解决此问题,因为它在请求中使用了 application\json(除非您另外指定)。

所以问题 2 已经修复。问题 1 可以使用 JSONP 解决。你应该只需要添加 ?callback=?到您的网址的末尾。但是,请阅读 jQuery 网站上的文档以获得完整的概述。

转到此 URL 并在页面上搜索“JSONP”http://api.jquery.com/jQuery.getJSON/

【讨论】:

  • 如果你检查小提琴,我已经使用了 dataType: "jsonp",它会自动添加 ?callback=? ...这应该解决跨域问题?
  • 你可以使用 jsonp ,前提是它被服务器支持
  • 如果我检查我们的控制台,它会显示 syntaxerror:invalid label 后跟一个超链接“getoperarors:1”,其中包含我正在寻找的难以捉摸的响应。所以正确的数据正在返回,但有一些错误。
  • 浏览一番后,我认为是服务器不支持 jsonp 回调。我将编辑该服务并回复说它是否有效:)
【解决方案2】:

问题出在服务器 webconfig 中。我必须添加

<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />

感谢您的建议,他们可能解决了我无论如何都会遇到的其他一些问题。 :)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2013-05-04
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
相关资源
最近更新 更多