Asp.net mvc ASP-MVC与jsonp
我需要从MVC应用程序通过Jsonp响应发送一些数据。对于Jsonp响应方法,我使用了JsonpFilter 这是我的Jsonp响应方法:Asp.net mvc ASP-MVC与jsonp,asp.net-mvc,jsonp,Asp.net Mvc,Jsonp,我需要从MVC应用程序通过Jsonp响应发送一些数据。对于Jsonp响应方法,我使用了JsonpFilter 这是我的Jsonp响应方法: [JsonpFilter] public JsonResult GetPageName() { return new JsonResult { Data = Session["Page"], JsonRequestBehavior = JsonRequestBeh
[JsonpFilter]
public JsonResult GetPageName()
{
return new JsonResult
{
Data = Session["Page"],
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
这是javascript函数:
$.ajax({
type: "GET",
dataType: "jsonp",
url: 'http://localhost:54845/Login/GetPageName',
contentType: "application/json; charset=utf-8",
success: function (data) {
alert(data.width + "-" + data.height);
}
});
这段代码只在FF上有效。在这方面什么也没有发生
我的代码有什么问题?多谢各位 您是否真的计划对JSON数据进行跨域HTTP获取?如果没有,为什么还要麻烦JSONP呢?只需使用JSON即可。Firefox正在变得松散而笨拙。其他浏览器都是正经的家伙 见: 引述: 一个网站只需通过 端口列表并继续调用 不同端口上的本地主机和 路。”“Localhost”是为数不多的DNS之一 具有动态含义的主机名 取决于时间和地点 查询,确定潜在目标 脆弱的是的,事实是 将点(.)追加到“localhost” ('localhost.')生成一个工作 解决方案确实暴露了安全性 脆弱性,但确实提供了 [暂定]开发工作区 蛹 更好的方法是绘制地图 将IP环回到中的新主机名条目 主机文件,使其工作 在本地,不容易被 浏览器更新,但不起作用 除了开发之外的任何其他地方 工作站
问题在于IE会话变量。 如果我用新的{var1=“var1”,var2=“var2”}替换会话[“Page”],它会工作。 所以我需要找到一个解决办法。 谢谢大家 MVC/JSONP/DataSet绑定 通过修改上面的代码,我能够让JSONP与MVC一起工作。此示例通过JSONP将数据集直接绑定到html元素 控制器 > 公共类HomeController:控制器 { [HttpGet] 公共行动结果负责人Jsonp() { DsPromotion.HeaderDataTable tbl=新的DsPromotion.HeaderDataTable(); DsPromotion.HeaderRow行=tbl.NewHeaderRow(); row.imgBanner_src=“/Content/Home/Image/MainBanner.gif”; tbl.行.添加(行); 返回新的JsonpResult{Data=tbl}; } }
public override object Deserialize(IDictionary<string, object> dictionary, Type type,
JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
DataTable listType = obj as DataTable;
if (listType != null)
{
// Create the representation.
Dictionary<string, object> result = new Dictionary<string, object>();
ArrayList itemsList = new ArrayList();
foreach (DataRow row in listType.Rows)
{
//Add each entry to the dictionary.
Dictionary<string, object> listDict = new Dictionary<string, object>();
foreach (DataColumn dc in listType.Columns)
{
listDict.Add(dc.ColumnName, row[dc.ColumnName].ToString());
}
itemsList.Add(listDict);
}
result[listType.TableName] = itemsList;
return result;
}
return new Dictionary<string, object>();
}
JSONP结果
>公共类JsonpResult:System.Web.Mvc.JsonResult
> {
>公共覆盖无效ExecuteSult(ControllerContext上下文)
> {
>this.JsonRequestBehavior=JsonRequestBehavior.AllowGet;
>if(上下文==null)
> {
>抛出新的ArgumentNullException(“上下文”);
> }
>
>HttpResponseBase response=context.HttpContext.response;
>如果(!String.IsNullOrEmpty(ContentType))
> {
>response.ContentType=ContentType;
> }
>否则
> {
>response.ContentType=“application/json”;
> }
>if(ContentEncoding!=null)
> {
>response.ContentEncoding=ContentEncoding;
> }
>如果(数据!=null)
> {
>HttpRequestBase请求=context.HttpContext.request;
>JavaScriptSerializer jsonserializer=新的JavaScriptSerializer();
>DataTableConverter序列化程序=新建DataTableConverter();
>Write(request.Params[“jsoncallback”]+”(“+jsonserializer.Serialize(serializer.Serialize(Data,new JavaScriptSerializer())+”)));
> }
> }
> }
Javascript/JQuery JSON请求和回调
>
函数BindDataTable(dataTable){
var表名;
for(数据表中的表名){
if(tableName.indexOf(“”)>0){
tableName=tableName.split(“”)[0];
}
}
var Element和Attrib;
对于(dataTable[tableName][0]中的elementAndAttrib){
var elementID=elementAndAttrib.split(“”)[0];
var attribName=elementAndAttrib.split(“”)[1];
var attribValue=dataTable[tableName][0][elementAndAttrib];
$(“#”+elementID).attr(attribName,attribValue);
}
}
函数GetHomeHeaderCallBack(tblHeader){
BindDataTable(tblHeader);
}
函数GetHomeHeader(){
var call=“/Home/HeaderJSONP?jsoncallback=?&”+Math.round(new Date().getTime());
$.getJSON(调用,{format:“json”},GetHomeHeaderCallBack);
}
$(GetHomeHeader)
局部视图
XSD
表序列化程序
>
公共类DataTableConverter:JavaScriptConverter
{
公共覆盖IEnumerable SupportedTypes
{
获取{return new Type[]{typeof(DataTable)};}
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type,
JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
DataTable listType = obj as DataTable;
if (listType != null)
{
// Create the representation.
Dictionary<string, object> result = new Dictionary<string, object>();
ArrayList itemsList = new ArrayList();
foreach (DataRow row in listType.Rows)
{
//Add each entry to the dictionary.
Dictionary<string, object> listDict = new Dictionary<string, object>();
foreach (DataColumn dc in listType.Columns)
{
listDict.Add(dc.ColumnName, row[dc.ColumnName].ToString());
}
itemsList.Add(listDict);
}
result[listType.TableName] = itemsList;
return result;
}
return new Dictionary<string, object>();
}
public override对象反序列化(IDictionary dictionary,Type,
JavaScriptSerializer(序列化程序)
{
抛出新的NotImplementedException();
}
公共重写IDictionary序列化(对象obj、JavaScriptSerializer序列化程序)
{
DataTable listType=obj作为DataTable;
if(listType!=null)
{
//创建表示。
字典结果=新字典();
ArrayList itemsList=新的ArrayList();
foreach(listType.Rows中的DataRow行)
{
//将每个条目添加到字典中。
Dictionary listDict=新字典();
foreach(listType.Columns中的DataColumn dc)
{
添加(dc.ColumnName,行[dc.ColumnName].ToString());
}
itemsList.Add(listDict);
}
结果[listType.TableName]=itemsList;
返回结果;
}
返回新字典();
}
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type,
JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
DataTable listType = obj as DataTable;
if (listType != null)
{
// Create the representation.
Dictionary<string, object> result = new Dictionary<string, object>();
ArrayList itemsList = new ArrayList();
foreach (DataRow row in listType.Rows)
{
//Add each entry to the dictionary.
Dictionary<string, object> listDict = new Dictionary<string, object>();
foreach (DataColumn dc in listType.Columns)
{
listDict.Add(dc.ColumnName, row[dc.ColumnName].ToString());
}
itemsList.Add(listDict);
}
result[listType.TableName] = itemsList;
return result;
}
return new Dictionary<string, object>();
}
享受吧!
马克·布里托