jquery 跨域调用wcf 返回json 碰到的一些问题

走到这里的时候,发现网络上能学习的资源或是比较适合自己项目的文章越来越少了,也在这里停留了比较长的时间

在做跨域的过程中,感觉http://localhost:9090/域与http://localhost/这是属于同样的域,或是说这样的试验没法证明是跨域

试验的过程中,建议先测试一些简单的例子,比如在服务器先放一些ASP页面直接能返回内容的,且不存在逻辑过程的,这样可以更直观的发现问题

jquery 跨域调用wcf 返回json 碰到的一些问题jquery 跨域调用wcf 返回json 碰到的一些问题Code
<%Response.Write(Request(“callback “))%>({“_AirdromeBuildCost “:0 ,”_DepDay “:null,”_DepMonthEN “:null,”_DepWeekEN “:null,”_Distance “:0 ,”_EndAirdromeEN “:null,”_EndCityCN “:null,”_FlightDate “:””,”_FuelTax “:0 ,”_StartAirdromeCN “:null,”_StartAirdromeEN “:null,”_StartCityCN “:null,”_endAirdromeCN “:null,”_flightDateTime “:”\/Date(1240716871875+0800)\/”,”_list “:[],”_sourAvhCmd “:””})

以上是我放在asp页面的内容,当然更建议您再简单些,比如

callback(json数据)这里的json数据不要用引号。

然后把该页面放在服务端,

本地调用。

我目前是使用jquery,主要是觉得他的轻巧。当然如果您的项目在内部运行,或整体加载速度等不是问题,且需要较好的UI,可以考虑EXTJS

在htm页面

第一,引用jquery的脚本文件

第二,html

有以下脚本

r参数是一个随机值,防止缓存的,其实跟踪客户端发出的数据会发现jquery会自动给该请求加上一个”_” 的参数,值是一个随机变量应该也是解决缓存的,

callback=?和下面的dataType:”json”,如果dataType:”jsonp”,那么就不需要加callback=?这个参数了,这个可以在服务端调试的时候发现到,

processData:false,默认是true,当我们的发送参数是传统的格式的时候,设置为false

ShowAv是回调函数,如果我们在服务端调试,在上面我们有看到服务端需要接收callback的参数,调试的时候会发现是一个类似jsonxxxxxx的值,在jquery里有明确的说明这个值即代表本文的ShowAv函数,

这样再认真查看服务端的代码,就会明白,服务端的代码实际上就是ShowAv(‘abcdf’),就是这样,也就是说,以下的脚本最终实现的一个目的与我们调用一个远程脚本文件(文件的内容是ShowAv(‘abcdf’))是一样的效果。这就是jsonp的原理所在。(有人说jsonp早就存在就是这个意思。)

jquery 跨域调用wcf 返回json 碰到的一些问题jquery 跨域调用wcf 返回json 碰到的一些问题Code
$(document).ready(function () {
var oBtnTest =$(“#btnTest “);

oBtnTest.click(function () {
$.ajax({
type:”GET “,
url:http://TicketSearch.XXX.net:9090/Ajax/AV/CmdAVAjaxP,
data:”CmdString=AVH/FOCPEK/D&r=”+Math.random()*150 +”&callback=?”,//调用服务所需要的参数contentType:”text/json; charset=utf-8 “,
dataType:”json “,
processData:false ,
success: ShowAv
});
});
});

function ShowAv(data) {}

以上的ShowAv函数,您可以添加任意您想要的测试脚本。

以上内容主要是针对初学者,进行跨域的测试,以及json数据的测试。

下面主要涉及的内容是wcf数据的提供。

这里提到的方法主要是针对跨域的WCF服务,如果没有跨域的WCF服务不需要如果此复杂。

在以上测试成功后,可以开始连接到我们提供WCF服务。

以下提供的服务方法,是支持http的get方法,返回的是Stream格式,AirFlights是这个服务原来返回的一个实体

被注释的部分是我曾尝试直接让WCF返回字符串格式,但在调试的时候会发现如果返回设置为json格式,整个字符串会被引号起来,下面的那种方法是借鉴了http://www.cnblogs.com/jillzhang/archive/2009/03/13/1245458.html

[WebGet(ResponseFormat =WebMessageFormat.Json, BodyStyle =WebMessageBodyStyle.WrappedRequest)]
public Stream CmdAVAjaxP(string cmdString,string callBack)
{
if (String.IsNullOrEmpty(cmdString))
{
return null ;
}
AirFlights air =CmdAVSearch(cmdString);
//JsonQueryStringConverter jqsc =new JsonQueryStringConverter();
//string strRe =String.Format(“{1}({0})”, jqsc.ConvertValueToString(air,typeof (AirFlights)), callBack);
//string strRe = jqsc.ConvertValueToString(air, typeof(AirFlights));
//return strRe;
System.Runtime.Serialization.Json.DataContractJsonSerializer formater =new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof (AirFlights));
MemoryStream ms =new MemoryStream();
formater.WriteObject(ms, air);
ms.Position =0 ;
StreamReader sr =new StreamReader(ms);
string objContent =sr.ReadToEnd();
string returnStr =callBack +”(“+objContent +”)”;
sr.Close();
ms =new MemoryStream();
StreamWriter sw =new StreamWriter(ms);
sw.AutoFlush =true ;
sw.Write(returnStr);
ms.Position =0 ;
WebOperationContext.Current.OutgoingResponse.ContentType =”text/plain “;
return ms;
}

这样基本上就OK了。;

Original: https://www.cnblogs.com/Blackie/archive/2009/04/27/1444601.html
Author: Blackie
Title: jquery 跨域调用wcf 返回json 碰到的一些问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684270/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球