使用 C# 和 WFC 的跨域 jQuery Ajax
本文关键字:jQuery Ajax WFC 使用 | 更新日期: 2023-09-27 18:33:17
我有一个用C#和WCF编写的小型Web服务。
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello Worlds";
}
}
我有一点jQuery代码;
$.support.cors = true;
$.ajax({
type: "POST",
url: "http://localhost:61614/Service1.asmx/HelloWorld",
data: '{}',
dataType: "json",
success: function (msg) {
alert(0);
}, error: function (a, b, c) { alert("Err:" + c );
}
});
这将调用 Web 服务。拨打电话没有问题,但在返回时出错。
Web 服务位于一个应用程序中,而网页本身只是一个 HTML 页面。 最终,HTML将在PhoneGap中使用。
我尝试了各种各样的事情。
添加contentType: "application/json; charset=utf-8",
会导致整个调用失败。使用dataType: 'jsonp"
会导致调用失败。
基本上,上面调用了 WS,但在返回时出错,这很奇怪。
我的要求是我需要从网络服务返回一个JSON对象,并且它必须在Safari中工作。
有没有人有 JSONP 调用的完整示例代码?
来自 jQuery getJSON:
如果 URL 包含字符串"callback=?"(或类似,由服务器端 API 定义(,请求被视为 JSONP。有关更多详细信息,请参阅 $.ajax(( 中对 jsonp 数据类型的讨论。
为了将您的请求视为 JSONP 请求,您需要在 URL 中包含callback=?
。这告诉 jQuery 创建一个回调函数,并将该函数的名称作为回调参数传递给您的服务器。
在服务器端代码中,您的方法必须返回包装或填充的 JSON 代码,并将 JavaScript 函数的名称作为查询字符串中的回调参数传入。
从本质上讲,您正在做的是将 JavaScript 返回到客户端浏览器,该浏览器立即运行,并调用已在页面上下文中定义的函数。
JavaScript:
$.getJSON("http://localhost:61614/Service1.asmx/HelloWorld?callback=?",
function(data) {
// alert raw JSON data
alert(JSON.stringify(data));
// access the "say" property and alert it
alert(data.say);
}
);
服务器端:
这是您需要在服务器端执行的操作的粗略版本:
// get the callback parameter value and assign to the String callback
...
return callback + "( { 'say' : 'HelloWorld' } );";
引擎盖下发生的事情的进一步技术解释:
虽然这不是你今天需要知道的事情,但这可以帮助你更多地了解jQuery是如何实现JSONP的。
计算结果可能如下所示:
return "jquery43214321432143242({'say':'HelloWorld'});"
其中jquery43214321432143242
是为成功回调函数提供的随机名称。同样,由于返回的文本是使用 text/javascript 返回的,因此它会立即运行,将{'say':'HelloWorld'}
对象作为参数传递给函数。
生成的输出应该是表示原始 JSON 的警报消息,以及从 .say
属性中提取的单词"HelloWorld"。