您的位置:首页 > Web前端 > JQuery

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

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

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

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

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了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: