- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试输出一个正确包装的 JSONP 值以供 jQuery 使用。
我正在寻找的输出是:
jsoncallback({"Status": "OK"})
但是它正在输出的 atm:
"jsoncallback({"Status": "OK"})"
显然这不是正确的 JSONP 格式,因为 jQuery 请求无法处理响应。
我在 C# 中的 OperationContract 是:
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "returndata?s={s}")]
Stream EchoWithGet(string s);
public string EchoWithGet(string s)
{
string json = @"jsoncallback({'Status':'OK'})";
Console.WriteLine("Call Made: " + s);
return json;
}
我已经尝试使用 JSON.NET
和 System.Web.Script
命名空间来使用 JavaScriptSerializer
。
但对我来说没有任何用处,我真正想做的就是去掉两个双引号。
最佳答案
如果您使用 jQuery 提交 ajax 请求并请求 dataType: "jsonp"
,jQuery 将在请求中传递回调函数的名称(例如,/returndata? s=hello&callback=jquery123456789
),因此在这种情况下返回常量“jsonCallback”将不起作用。
此外,在您的问题中,操作契约(Contract)定义返回 Stream
,而在操作本身上您返回 string
- 那里出了点问题。
您需要做什么:您有两个选择。第一个是让 WCF 为您处理 JSONP 填充。您的操作需要返回具有属性“Status”的数据类型,然后返回它。您还需要在端点使用的 WebHttpBinding 上启用 CrossDomainScriptAccessEnabled
属性。您的操作类似于以下代码:
public class MyType
{
public string Status { get; set; }
}
[ServiceContract]
public class Service
{
[WebGet(UriTemplate = "returndata?s={s}")]
public MyType ReturnData(string s)
{
return new MyType { Status = "OK" };
}
}
第二个选项,如果您想自己创建 JSONP 代码,可以在 URI 中为回调函数名称获取一个附加参数,然后在创建响应时使用它。您还需要将其作为 Stream
返回,这样您就不会得到字符串形式的响应(这可能是您现在拥有的)。看起来像这样:
[ServiceContract]
public class Service
{
[WebGet(UriTemplate = "ReturnData?s={s}&callback={callbackFunctionName}")]
public Stream EchoWithGet(string s, string callbackFunctionName)
{
string jsCode = callbackFunctionName + "({\"Status\":\"OK\"});";
WebOperationContext.Current.OutgoingResponse.ContentType = "application/javascript";
return new MemoryStream(Encoding.UTF8.GetBytes(jsCode));
}
}
此 jQuery 代码可用于访问此服务:
function StackOverflow_11090835_Test() {
var url = "/StackOverflow_11090835.svc/ReturnData";
var data = { s: "Hello world" };
$.ajax({
type: 'GET',
url: url,
data: data,
dataType: "jsonp",
success: function (result) {
$("#result").text(result.Status);
}
});
}
关于c# - 以正确的 WCF 格式返回 JSONP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090835/
如果可能的话,我想在答案中举一个具体的例子。 为了解释起见,我们这里有三个玩家。 我的服务器 (myserver.com) 客户端服务器 (myclient.com) 客户用户(通过 myclient
我想通过 JSONP 提供 Web 服务,并且想知道是否需要清理回调参数中的值。 我当前的服务器端脚本目前看起来像这样(或多或少。代码在 PHP 中,但实际上可以是任何东西。): header("Co
我有一个每分钟更新一次数据的 Web 服务器,并且希望使该数据可供所有类型的客户端使用。为了减少带宽,我使用 IF-MODIFIED-SINCE 和/或 IF-NONE-MATCH 设置 PHP 脚本
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 7 年前。 Improv
我正在努力使用 vue-resource 发出 JSONP 请求。任何人都可以提供一些工作示例来演示定义 jsonp 回调、处理 Vue 组件中的调用等的正确方法。 谢谢 **编辑:**对于其他人,让
我正在尝试获取 AngularJS 中 rest api 的 JSON 输出。以下是我面临的问题: Rest api url 中有端口号,AngularJS 为变量插入端口号。为此,我尝试了多种解决方
代码: 当我在浏览器中输入网址时,我可以看到所有对象,例如: link 但我似乎无法让它在我的代码中工作,我是否遗漏了什么? angular.module('ionicApp', ['ionic']
我在连接最近了解 JSONP 的一些点时遇到了麻烦。这是我的理解: 由于同源策略,禁止任何内容(包括 JSON)的跨域 XmlHttpRequests。这可以防止 XSRF。 您可以拥有一个带有返回
我正在使用 JSONP 进行 Ajax 调用以从第三方(与我的站点不同的域)获取 JSON 数据,它在 Chrome 和 Firefox 上工作但在 IE 上失败(9 和 10 是我试过的版本) .在
django rest 框架发行说明声称在 0.3.0 中重新添加了 JSONP 支持。我还在框架中找到了一个 JSONPRenderer 类。但是,我似乎找不到有关如何使用该东西的任何文档.....
我有一个使用 JSONP 的 WCF 服务(托管在 Azure 中)。它在 HTTP 上工作得很好,即,如果它仅接收 JSON,则仅返回 JSON,如果它接收 JSONP,则返回 JSONP。但是,一
有人知道为什么我的ajax失败吗? 我从这里通过 JSONP 获取数据: JSON Data 您可以使用此代码,并注意“警报”如何永远不会执行: $(document).ready(function(
我正在使用 jaubourg 的 jquery-jsonp module从与我的网站所在的域不同的域中获取数据。我从 jQuery 的 ajax 开始使用这个模块函数不支持 JSONP 请求的错误处理
我有一个使用 Jquery Mobile 制作移动 Web 应用程序的项目。我希望我的应用程序能够使用来自跨域 REST Web 服务的数据。很多人说用JSONP。但我仍然困惑如何使用它以及如何构建支
我正在使用 Angular 的 $http.jsonp() 请求,它成功返回了包含在函数中的 json: var url = "http://public-api.wordpress.com/rest
基于 Please explain JSONP ,我知道可以使用 JSONP 来绕过同源策略。 但是为了做到这一点,页面必须使用 标签。 我知道页面可以动态地发出新的脚本标签,例如: docum
在 jQuery 中使用 JSONP 时是否可能捕获错误?我已经尝试了 $.getJSON 和 $.ajax 方法,但都不会捕获我正在测试的 404 错误。这是我尝试过的方法(请记住,这些都可以成功运
我正在为一个带有嵌入推文的页面使用内容安全策略,我收到了 https://cdn.syndication.twimg.com 的报告。 ,这在我的政策中是不允许的。 这是一个很长的政策,但相关部分
使用 mootools 和 JsonP 我在 Firefox 错误控制台中收到“无效标签”错误 JsonP 似乎可以工作(我正确地获取了数据) {"jsondata":[{"title":"title
JSONP (JSON with Padding) 是 JSON 的一种 使用模式,可以让网页从别的网站那获取数据,即跨域读取数据 为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP
我是一名优秀的程序员,十分优秀!