Asp.net mvc ASP-MVC与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

我需要从MVC应用程序通过Jsonp响应发送一些数据。对于Jsonp响应方法,我使用了JsonpFilter

这是我的Jsonp响应方法:

[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>();
   }
享受吧! 马克·布里托