zoukankan      html  css  js  c++  java
  • Ajax 跨域操作

    ajax 默认是不能跨域操作的,因为浏览器出于安全考虑默认禁用xmlhttp的跨域,不过这个选项你可以修改。

    一般不同业务接口会放在不同域名下,支持跨域调用时很有必要的:

    下面的代码是一个消息通知,就是在以下多个站点下发布同一个信息,后面还有个“我知道了”点击消失,而且第二次不能显示出来了。豆瓣这样做,汪汪同学就也要一个,做就要做个方便的。下面的ashx文件输出js代码。js生成html及js跨域操作。

    <

    %@ WebHandler Language="C#" Class="ClubNoticeHandler" %>

    using System;
    using System.Web;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;

    public class ClubNoticeHandler : IHttpHandler {
        
        
    public void ProcessRequest (HttpContext context) {
            context.Response.ContentType 
    = "text/plain";
            
    string TxzId = context.Request.QueryString["TxzId"];
            
    string NoticeId = context.Request.QueryString["NoticeId"];
            
    if (!string.IsNullOrEmpty(TxzId))
            {
                
    if (!string.IsNullOrEmpty(NoticeId))  //处理一下啊
                {
               
                   HaveSeeNotice(Convert.ToInt32(TxzId), Convert.ToInt32(NoticeId));
                }
                
    else  //输出脚本
                {
                   context.Response.Write( GetScript());
                }
            }
        }
     
        
    public bool IsReusable {
            
    get {
                
    return false;
            }
            
        }
        
    private String GetScript()
        {
            
            
    //实现跨域提交,不用jquery
            string script = " function IhavSeeThis(TxzId, NoticeId) {" +
            
    " document.getElementById('ClubNotice_' + NoticeId).style.display = \"none\";" +
            
    "  var sc= document.createElement(\"script\");"+
            
    "   sc.type=\"text/javascript\";" +
             
    "    sc.src=\"ClubNoticeHandler.ashx?TxzId=\" + TxzId + \"&NoticeId=\" + NoticeId;" +
             
    "    document.body.appendChild(sc);" +
            
    " }";
            
            
     
    //" $.get(" +
     
    //       " \"ClubNoticeHandler.ashx?TxzId=\" + TxzId + \"&NoticeId=\" + NoticeId, function() { alert(1) }" +
     
    //       " )" +

            
    string Html="";
            
    int TxzId = 3866;
            List
    <ClubNotice> club = GetNoSeeNotice(TxzId);
            
    foreach (ClubNotice cl in club)
            {
              Html
    +=  "<div id=\"ClubNotice_" + cl.Notice_Id + "\">内容:" + cl.Notice_Content + "<a href='javascript:void(0)' onclick=\"IhavSeeThis(" + TxzId.ToString() + "," + cl.Notice_Id + ")\"'>我看过了<a></div><br/>";
            }
            
    string HtmlScript = " document.write(\""+Html.Replace("\"","\\\"")+"\");";
            
    return script + HtmlScript;
        }
        
    public void HaveSeeNotice(int TxzId, int NoticeId)
        {
            
    string SqlText = "insert into [UserNotice] ([UserNot_TxzId] ,[UserNot_NotId]) values (@UserNot_TxzId,@UserNot_NotId)";
            SqlParameter[] param 
    = new SqlParameter[2];
            param[
    0= new SqlParameter("@UserNot_TxzId", TxzId);
            param[
    1= new SqlParameter("@UserNot_NotId", NoticeId);
            DBHelper.DBHelper.ExecuteNonQuery(DBHelper.DBHelper.Ncuhome2006Conn, CommandType.Text, SqlText, param);
        }

        
    public List<ClubNotice> GetNoSeeNotice(int TxzId)
        {
            List
    <ClubNotice> club = new List<ClubNotice>();
            
    string SqlText = "select * from [Notice] where Notice_DurToTime >'" + DateTime.Now.ToString() + "' and Notice_Visible=1 and " +
                
    " Notice_Id not in (select UserNot_NotId from UserNotice where UserNot_TxzId=" + TxzId.ToString() + ")";
            SqlDataReader reader 
    = DBHelper.DBHelper.ExecuteReader(SqlText, DBHelper.DBHelper.Ncuhome2006ConnectionString);
            
    while (reader.Read())
            {
                ClubNotice c 
    = new ClubNotice();
                c.Notice_Content 
    = reader["Notice_Content"].ToString();
                c.Notice_CreateTime 
    = Convert.ToDateTime(reader["Notice_CreateTime"]);
                c.Notice_Title 
    = reader["Notice_Title"].ToString();
                c.Notice_Id 
    = Convert.ToInt32(reader["Notice_Id"]);
                club.Add(c);
            }
            reader.Close();
            
    return club;
        }
        
    public class ClubNotice
        {
            
    public int Notice_Id { getset; }
            
    public string Notice_Title { getset; }
            
    public string Notice_Content { getset; }
            
    public DateTime Notice_CreateTime { getset; }
        }
    }

    引用的话只是需要 <script src=' http://club.ncuhome.cn/ClubNoticeHandler.ashx?txzid=222'/> 就ok了,里面有ajax的效果,可以在各个站点下直接引用。

  • 相关阅读:
    linux配置PHP环境!!(云服务器架设)
    JQ上传预览+存数据库
    AJAX做增删改查详细!
    JS解析XML
    UEditor编辑器的使用
    php注释规范
    phpexcel导出数据表格
    简单分析JavaScript中的面向对象
    制作smarty模版缓存文件
    求二叉树中节点的最大距离
  • 原文地址:https://www.cnblogs.com/lulu/p/1274887.html
Copyright © 2011-2022 走看看