thinkphp的ajax操作简记
快被这玩意玩死了
好在终于弄出来了,使用 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 的,这个注意!
- 上一篇: 微信小程序打开微信公众号中的文章实战教程
- 下一篇:没有了
