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了。
在做跨域的过程中,感觉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了。
相关文章推荐
- Jquery跨域调用struts2的Action返回json数据易出现的问题
- Jquery跨域调用struts2的Action返回json数据易出现的问题
- jQuery调用WCF需要注意的一些问题
- jQuery调用WCF需要注意的一些问题
- JQuery用Ajax调用WCF 一些问题
- jQuery在异步请求数据返回后,调用$("selector").html(data.content);之后因为一些特殊字符或者',"不能显示内容的问题解决办法
- jQuery通过调用webservice返回json数据的问题
- jQuery调用WCF需要注意的一些问题
- jQuery调用WCF需要注意的一些问题(转dudu)
- jQuery调用WCF需要注意的一些问题
- jQuery调用WCF需要注意的一些问题
- jQuery调用WCF需要注意的一些问题
- jquery调用wcf需要注意的一些问题
- jQuery调用WebService返回JSON数据及参数设置注意问题
- php jquery jsonp 跨域访问,jsoncallback无返回?!!!,无解了,为什么没返回,没返回!原来是是这个jsoncallback的问题
- jQuery调用WCF需要注意的一些问题
- jQuery调用WCF需要注意的一些问题
- (转)jquery跨域调用webService,以及解决跨域情况下只能返回XMl格式数据的问题
- jQuery调用WCF返回JSON对象
- jQuery :调用WCF需要注意的一些问题