入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

thinkphp的ajax操作简记

创建时间:2016-08-25 投稿人: 浏览次数:441

快被这玩意玩死了哭好在终于弄出来了,使用 jquery 的 $.ajax 方法与服务器端进行通讯,服务器端使用 thinkphp 3.2.3的版本。

首先在这里申明两个很重要的差别:资源路径与URL的差别,我就是被这玩意玩死了发火

学过 thinkphp 的人都知道 thinkphp 的 URL 分为四种模式,以 pathinfo 模式为例,他的 URL 模式是这样的:

http://localhost
/index.php(入口文件,默认是index.php)
/Home(模块名,默认是Home)
/index(控制器,默认是IndexController,也就是一个继承了Controller的类)
/index(操作,默认是index,也就是类中定义的一个方法)
/参数名/参数值
无论我们使用 jquery 方法中的 $.post 还是 $.get 以及 $.ajax 都要写 URL,那么这两者是否一致呢?不,jquery 中的 URL 还要再加一个参数!!!! 否则无论你怎么修改你的代码都没用。我们上面讨论的 URL 模式是在 thinkphp 内部使用的,但是针对外部直接访问就是错误的了,

例如我在采用下面的地址:

http://localhost/index.php/Home/index/index 

如果你是使用编译器直接开启页面的,那么你会看见标准的 thinkphp 欢迎界面,但是如果你直接在浏览器中输入上面的地址的话,那么你会看见的就是下面的界面(我用的 xampp):


可见,上面的地址并不能被 Xampp 解析,正确的 URL 地址应该是:

http://localhost    拿 xampp 为例,这里就是指向 xampp 中的 htdocs,也就是你网站项目的地方,但是可能不止一个网站项目,这个时候就要传入下面这个参数了
trouble_i_am_in/    这个就是我的项目之一,少了他的话,xampp就解析不了你的地址,直接跳到 htdics 下的 index.php 中了,也就是上面那个页面,后面的内容都会无视
index.php/          这里开始就是标准的 thinkphp URL 模式了
Home/
index/
index

从外部直接访问服务器的内容都要采用这种形式。

接着讲资源地址,也就是引用,有时候脑子一抽,就会自动脑补下面的编程思路:

哦,这里要引用应用下的 Home 模块的 View 视图下的 register.html 

于是就写成了 Application/Home/View/register.html 

造成上面情形的最主要原因是没分清 URL 与 资源路径的区别,一般情况下的话,都是调用外部资源的时候才会采用刚才的方式,像css库,js库等,而页面跳转都是 URL 的内容。

上面扯了半天我遇到的最大的难题,接下来开始讲我实现的过程

首先是 js 部分

<!--百度的jquery静态资源库-->
<script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
<!-- 我采用的是当 id 为 username 的输入框改变时触发事件,并且把这个输入框的值通过 ajax 请求传回服务器端 -->
<script type="text/javascript">
    $("#username").change(function () {
        // 得到输入框的值
        var $usernames = $("#username").val();
        // 这里就是我上面说的地址,一定要写对,我是直接写的,没使用 U 方法
        var $url = "http://localhost/trouble_i_am_in/index.php/Home/register/index"
        // 这里 $retuenmessage 是一个对象,就是返回的值,要把他变成 json 形式,还需要一步,下面讲
        $returnmessage = $.ajax({
            type: "post",
            url: $url,
            // 这里是当成功时就显示返回信息
            success: function () {
                // 把 $returnmessage 变成 json 格式的就只要在后面加 .responseText,xml我不知道,我比较喜欢 json 格式
                alert($returnmessage.responseText);
            },
            // 错误时
            error: function () {
                alert("error");
            }
        });
    });
</script>
接着根据我上面写的 URL 地址来写我的服务器端文件:Home 模块下的 RegisterController.class.php 文件中的 index 方法

首先先看以下 thinkphp 中封装好的 ajax 方法,源文件如下:

/**
 * Ajax方式返回数据到客户端
 * @access protected
 * @param mixed $data 要返回的数据
 * @param String $type AJAX返回数据格式
 * @param int $json_option 传递给json_encode的option参数
 * @return void
 */
protected function ajaxReturn($data,$type="",$json_option=0) 
以我现在的水平是看不懂最后一个参数是什么意思,不过前两个还是通俗易懂的。

所以我的服务器端代码如下:

namespace HomeController;

use ThinkController;

class RegisterController extends Controller{
    public function index(){
//        下面是传两个参数回去做实验的,没有解析什么数据,至于如何处理接收到的数据,下一次再说
        $data["name"]="ok";
        $data["id"]=1;
        $this->ajaxReturn($data,"json");
    }
}
这里只是对 thinkphp 与服务器端进行了 ajax 连接,什么操作都还没做。最后的结果如下:


/********************************************************************************************************************************************************************************************/

这里开始是我设置过域名后再来补上的一段内容,设置好域名后就可以以这种方式直接调用 thinkphp,我设置的域名是 www.lucifer.morning.star.com.cn:

https://www.lucifer.morning.star.com.cn/index.php/Home/register/identify

在域名之后直接添加:模块 控制器 操作方法 等内容,其实就是把原先的 localhost 以及项目名称拿域名代替掉了,最好是使用 thinkphp 自带的 U 方法,还能自动判断 https 还是 http,但是在模版中不能在 js 中调用模版标签,thinkphp 不会编译 js 的,这个注意!








声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。