您的位置:首页 > 编程语言 > ASP

在PHP中使用ASP.NET AJAX

2007-12-23 07:17 435 查看
借助于CodePlex上开源项目PHP for Microsoft AJAX Library的帮助,我们已经可以在PHP上使用ASP.NET AJAX的很多核心功能了。
 
下载安装
PHP for Microsoft AJAX Library目前仅仅处于Alpha阶段,想实际使用似乎还早了点,只能尝鲜了。
预先需求有PHP 5.2版本,且必须安装了php-json模块。
下载地址:http://www.codeplex.com/phpmsajax/Release/ProjectReleases.aspx?ReleaseId=1692
安装方法:
下载PHP for Microsoft AJAX Library并解压缩
下载Microsoft AJAX Library(http://ajax.asp.net
在PHP Web Service代码中include一下MSAjaxService.php。
在调用该Web Service的页面中,引入MicrosoftAjax.js文件。
下面来看一个“经典”的场景:调用服务器端方法取得复杂类型。
 
编写Service文件
新建一个php文件,命名为EmployeeService.php。首先写上这一句,include必要的支持代码:
require_once 'MSAjaxService.php';
.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; } 
然后定义一个Employee类。四个属性一目了然,不用多说:
class Employee
{
public $Id;
public $Name;
public $Email;
public $Salary;
 
function __construct($id, $name, $email, $salary)
{
$this->Id = $id;
$this->Name = $name;
$this->Email = $email;
$this->Salary= $salary;
}
}
 
接下来是EmployeeService类,继承与MSAjaxService.php中的MSAjaxService基类。其中定义一个方法,用来返回一个Employee对象:
class EmployeeService extends MSAjaxService
{
function GetEmployee()
{
return new Employee(12345, "Dflying Chen", "Dflying@some.com", 1000);
}
}
 
然后新建一个EmployeeService的实例,并且调用基类的ProcessRequest()方法,处理该请求:
$theService = new EmployeeService();
$theService->ProcessRequest();
 
大功告成!
 
编写调用页面
新建一个页面,php或者html均可——程序比较简单。这回我们没了ScriptManager的帮助,引入ASP.NET AJAX客户端脚本文件以及上面的这个Service只能靠手工了。注意EmployeeService.php/js可以得到该Service的客户端代理,和ASP.NET平台上的语法一样:
ASP.NET AJAX On PHP Demotitle></pre><pre><script type="text/javascript" src="MicrosoftAjaxLibrary/MicrosoftAjax.js">script></pre><pre>"text/javascript" src="EmployeeService.php/js">script></pre><pre>head></pre> <br/>程序的UI部分很简单,按钮用来触发异步调用,<br/>用来显示调用结果: <br/><pre><body></pre><pre><input id="btnGetEmployee" type="button"</pre><pre>value="Get an Employee" onclick="return btnGetEmployee_onclick()" /></pre><pre><div id="resultDiv"></pre><pre>div></pre><pre>body></pre> <br/>在该按钮的click事件处理函数中,调用该Service,语法也和ASP.NET AJAX中一致,非常方便:<br/><pre>function btnGetEmployee_onclick()</pre><pre>{</pre><pre>EmployeeService.GetEmployee(onSucceeded);</pre><pre>}</pre> <br/>在回调函数中,把得到的Employee对象显示到resultDiv中:<br/><pre>function onSucceeded(result)</pre><pre>{</pre><pre>var sb = new Sys.StringBuilder("Server returns an Employee object:
");</pre><pre>sb.append("Id: " + result.Id + "
");</pre><pre>sb.append("Name: " + result.Name + "
");</pre><pre>sb.append("Email: " + result.Email + "
");</pre><pre>sb.append("Salary: " + result.Salary + "
");</pre><pre> </pre><pre>$get("resultDiv").innerHTML = sb.toString();</pre><pre>}</pre> <br/>大功告成!<br/> <br/><b>示例程序界面</b><br/>第一次访问<br/> <br/><br/><img src="http://www.cnblogs.com/images/cnblogs_com/dflying/WindowsLiveWriter/PHPASP.NETAJAX_B8/image%7B0%7D%5B1%5D.png" border="0" ><br/><br/> <br/>点击Get an Employee按钮后<br/> <br/><br/><img src="http://www.cnblogs.com/images/cnblogs_com/dflying/WindowsLiveWriter/PHPASP.NETAJAX_B8/image%7B0%7D%5B3%5D.png" border="0" ><br/><br/> <br/><b>示例程序代码下载</b><br/>在这里呢:<a href="http://www.cnblogs.com/Files/dflying/ASPNETAJAXOnPHP.zip" target=_blank>ASPNETAJAXOnPHP.zip</a><br/> <br/>好一阵子没用PHP了,生疏了不少。不过照猫画虎还是做出来了,这个项目我觉得非常有前途,各位朋友不妨参与一下。这一段比较忙,没写什么技术文章,这一篇也是草草而为,请朋友们见谅。<br/><br/>Trackback: <a href='http://tb.blog.csdn.net/TrackBack.aspx?PostId=1569920' target='_blank'>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1569920</a> 
                                            </div>
                                        <div class="open-message">
                        <i class="fa fa-bullhorn"></i>
                        内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 <a target="_blank" href="https://wpa.qq.com/msgrd?v=3&uin=2300620005&site=qq&menu=yes"><img border="0" src="https://pub.idqqimg.com/qconn/wpa/button/button_111.gif" alt="点击这里给我发消息" title="点击这里给我发消息"/></a> 
                    </div>
                    <div class='bottom-note-box load-note' note-id='4'></div>
                    <div class='detail_cate'>
                        <div class='detail_tags'>
                        <b><i class="fa fa-tags"></i> 标签:</b> 
                                                </div>
                        <div class='clear'></div>
                    </div>

                </div>
            </div><!--white-div-->

            <div class='white-div mt10'>
                <div class='content_title'><b>相关文章推荐</b></div>
                <div class='relate-doc-top'></div>
                <div class='relate_doc' id='relate_doc_list'>
                    <ul>
                                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2408861223.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2423378300.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365301.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409390201.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2418673881.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409389781.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2387914940.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365974.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2418760824.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2420588781.html'>在PHP中使用ASP.NETAJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2418667174.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2387915060.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2418758367.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2418674489.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2416200165.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2408920880.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2423929460.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365546.html'>在PHP中使用ASP.NET AJAX</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2490532762.html'>Asp.net mvc 2中使用Ajax的三种方式</a></li>
                                                <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2592935063.html'>asp.net ajax AjaxFileUpload使用 多文件上传</a></li>
                                                                    </ul>
                </div>
            </div>
        </div><!--left-->
        <div class='content_right'>
            <div class='load-note' note-id='5' style="margin-bottom: 10px;"></div>
            <!--
            <div class='white-div'>
                <div class='sidbar_div'>
                    <div class='content_title'><b>极客分享</b></div>
                    <div class='sidbar_list'>
                        <ul>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365484.html'>《ASP.NET Ajax程序设计-第I卷:服务器端ASP.NET 2.0 AJAX Extensions与ASP.NET AJAX Control Toolkit》2007年4月16日 china-pub全国首发!+ 赠书名单已经确定</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365545.html'>《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》连载&amp;最新更新</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365607.html'>《ASP.NET AJAX程序设计 第I卷》的心路历程</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365608.html'>《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》试读及免费赠书活动</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365724.html'>CSDN的Blog要如何配置才能够用Windows Live Writer发布带有图片的Post?</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365784.html'>ASP.NET 2.0 Beta 1研究总结</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365846.html'>User Interface Process(UIP) Application Block 2.0 研究总结</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365847.html'>Authorization and Profile Application Block 1.0研究总结</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365905.html'>Reporting Service for SQL server 2000预览研究</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365965.html'>递归算法在javascript中使用的小技巧 (javascript的对象封装方法介绍)</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409365966.html'>利用css里expression来实现界面对象的批量控制</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2409366025.html'>SharePoint:DataView如何绑定Web Service返回的主从表数据集</a></li>
                                                    </ul>
                    </div>
                </div>
            </div>
            -->
            <div class='white-div mt10'>
                <div class='sidbar_div'>
                    <div class='content_title'><b>新的分享</b></div>
                    <div class='sidbar_list'>
                        <ul>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2863160840.html'>Asp.Net Core中注入泛型接口的依赖项</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2862928520.html'>AspNetCore7.0源码解读之UseMiddleware</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2862059600.html'>【Azure 应用服务】App Service运行时突然中断:There is not enough space on the disk : 'D:localTempASPNETCORE...</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2861333420.html'>AspNetCore配置多环境log4net配置文件</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2861245580.html'>理解ASP.NET Core - 授权(Authorization)</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2861072180.html'>ASP.NET Core 6.0 添加 JWT 认证和授权</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2860991060.html'>.NET 7 预览版2 中的 ASP.NET Core 更新</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2860638200.html'>ASP.NET Core WebApi返回结果统一包装实践</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2860401080.html'>asp.net core启动源码以及监听,到处理请求响应的过程</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2860391360.html'>ASP.NET Core 6 的性能改进</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2858657720.html'>【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?</a></li>
                                                        <li><i class="fa fa-minus"></i><a href='https://www.geek-share.com/detail/2856248300.html'>aspnetcore 使用serilog日志</a></li>
                                                    </ul>
                    </div>
                </div>
            </div>

            <div class='white-div mt10 topic_nav'>
                <div class='sidbar_div'>
                    <div class='content_title'>章节导航</div>
                    <div class='sidbar_list topic_nav_list'>
                        <div class="highlight-title" style='display: block;top: 63px;height: 27px;'></div>
                        <ul class="articleIndex">
                        </ul>
                    </div>
                </div>
            </div>
        </div> <!--right-->
        <div class="clear"></div>
    </div>
</div>

    <ul class="scrolltop_bar list-unstyled data-offset-top" data-spy="affix" data-offset-top="250">
    <li class="new_share" title="分享">
    <div class="bdsharebuttonbox hover_show">
        <a class="bds_tsina" data-cmd="tsina"></a>
        <a class="bds_weixin" data-cmd="weixin"></a>
    </div>
    <a class="btn hover_hide"> <i class="fa fa-share-alt"></i></a>
    </li>
    <li class="new_comment">
    <a class="start_cmmde btn" data-target="comment_news"><span>添加评论</span><i class="fa fa-comments"></i></a>
    </li>
    <li class="new_geek">
    <a class="start_cmmde btn share-link-btn" data-type='1'><span>分享网址</span><i class="fa fa-link"></i></a>
    </li>
    <li class="new_geek">
    <a class="start_cmmde btn share-link-btn" data-type='2'><span>分享文章</span><i class="fa fa-file-text-o"></i></a>
    </li>
    <li class="js-scroll-top">
    <a class="btn"><span>返回顶部</span><i class="fa fa-arrow-up"></i></a>
    </li>
    <!--
    <li class="js-list-top">
    <a class="btn"><span>返回顶部</span><i class="fa fa-arrow-up"></i></a>
    </li>
    -->
</ul><footer class="footer">
<div class="footer-inner">
    <div class="copyright pull-left">
        <a href="https://www.geek-share.com/" title="极客分享">https://www.geek-share.com/</a> 
        GeekShare·极客分享·来自极客的分享  © 2016-2019 ·  
        <a href='http://www.beian.miit.gov.cn' target='_blank'>粤ICP备17045047号</a>
         <a target="_blank" href="https://wpa.qq.com/msgrd?v=3&uin=2300620005&site=qq&menu=yes"><img border="0" src="https://pub.idqqimg.com/qconn/wpa/button/button_111.gif" alt="点击这里给我发消息" title="点击这里给我发消息"/></a>
    </div>
    <div class="trackcode pull-right">
        <script>
            var _hmt = _hmt || [];
            (function() {
                var hm = document.createElement("script");
                hm.src = "https://hm.baidu.com/hm.js?7ed446819d539a64900a28a84b99bc32";
                var s = document.getElementsByTagName("script")[0]; 
                s.parentNode.insertBefore(hm, s);
            })();
        </script>

    </div>
</div>
</footer>
<script src="https://open.web.meitu.com/sources/xiuxiu.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8" src="/public/geekshare/bdeditor/ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="/public/geekshare/bdeditor/ueditor.all.min.js"> </script>
<script type="text/javascript" charset="utf-8" src="/public/geekshare/bdeditor/lang/zh-cn/zh-cn.js"></script>
<script src="/public/geekshare/js/namedavatar.min.js"></script>
<script type='text/javascript'>
    $(function() {
        $('.user-pic').each(function() {
            var src = $(this).attr('src');
            src = src.split('/');
            if(src[src.length-1] == 'u.png') {
            namedavatar.setImg(this, this.alt.substr(0, 3));    
            }
        })

        $(window).resize(function() {
            calcMinHeight(); 
        })

        function calcMinHeight() {
            if (window.innerHeight)
                winHeight = window.innerHeight;
            else if ((document.body) && (document.body.clientHeight))
                winHeight = document.body.clientHeight;
            else if (document.documentElement  && document.documentElement.clientHeight && document.documentElement.clientWidth)
            {
                winHeight = document.documentElement.clientHeight;
            } 
            $('.main').css('min-height', winHeight-50);
            $('.content').css('min-height', winHeight-90);
        }
        calcMinHeight();
    })
</script>
<script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js" async="async" defer="defer" ></script>
<script type='text/javascript' async charset='utf-8' src='/public/notejs?id=1,2,3,4,5,6,7,8,9'></script>
<script data-ad-client="ca-pub-8588029585549143" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script></body>
</html>
<script type="text/javascript">
    var topic_id = '2409365423';
    var is_report = false;
    $('.detail_content img').error(function() {
            var src = this.src
            if (src.indexOf('/image_services/') !== -1) {
                console.warn('load image error')
                return false
            }
            this.src = "/image_services/" + encodeURIComponent(this.src);
            console.log(this)
        return true
        if(is_report) {
            console&&console.log('is report');
            return true;
        }
        is_report = true;
        $.post('/topic/reporterror',{topic_id:topic_id}, function(data) {
            if(data.status == 0 && data.data == true) {
                window.location.reload();
            }
            
        },'json');
    })
    $('.content_wview .rich_media_content').css('visibility', 'visible');

    $('.detail_content img[data-src]').each(function() {
        var src = $(this).attr('data-src')
        if (src.indexOf("geek-share.com")) {
            $(this).attr('src', src)
            return true
        }
        $(this).attr('src', "/image_services/" + encodeURIComponent($(this).attr('data-src')));        
    })
        setTimeout(function() {
        showConfirmDialog(topic_id);        
    }, 2000)
    
</script>