ThinkPHP中jquery问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP中jquery问题相关的知识,希望对你有一定的参考价值。

我不想在本页面追加查询结果,而想跳转到新页面显示查询结果。
function search()
key = $("#search").val();

if (key.length == 0)
alert('请输入查询条件');
return;


$.post("__APP__/Index/search", search_key:key ,
function(data,status)

// alert("Data: " + data + "\nStatus: " + status);
$("#table1 tbody").append(data);
不知道怎么弄,本人新手菜鸟,求指导。

那就不需要使用Ajax啊,直接将查询提交到新页面即可:

1、修改search函数

function search() 
        key = $("#search").val();
        if (key.length == 0) 
            alert('请输入查询条件');
            return;
                
        window.location.href = "__APP__/Index/search?search_key"+key;

2、后台的__APP__/Index/search函数不要使用ajax返回,直接显示模板

3、新写一个显示查询结果的模板页面。

追问

就是post新页面吗?
我就是想问问这个方法里能不能实现跳转,不会写。大神能不能详细教教

追答

对啊,直接跳转到新页面,你可以用form表单提交,也可以在前台的search函数中跳转,参考如下思路:

1、修改search函数

function search() 
        key = $("#search").val();
        if (key.length == 0) 
            alert('请输入查询条件');
            return;
                
        window.location.href = "__APP__/Index/search?search_key"+key;

2、后台的__APP__/Index/search函数不要使用ajax返回,直接显示模板

3、新写一个显示查询结果的模板页面。

追问

search怎么改呢,大神,待会给你加分哈

   

追答

if($data)及之后的部分删掉,改为

$this->assign("data",$data);
$this->display();

追问

新模板建立后怎么指向和输出啊。另外报错上图

追答

哪一个页面的报错?点击搜索之后的报错?
新模板中使用thinkphp模板标签的volist进行循环输出,这个涉及到你的$data数组的结构,你可以百度一下volist的使用,很简单。

追问

是的点击搜索,毫无反应,调试看报错的。

追答

怀疑是跳转地址写错了,你把js函数中 window.location.href = "__APP__/Index/search?search_key"+key; 改为 window.location.href = "可以访问的地址,例如百度";试试能不能跳转

参考技术A ThinkPHP搜索查询的key,获取时需要用$_GET方式!追问

具体还是不会,我只会php的,这个thinkphp的语言语法不太懂

追答

search_key 获取要用get方式获取
就是你search() 第一行 $key = I('get');

ThinkPHP+JQuery实现文件的异步上传

前端代码

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>ThinkPHP+JQuery实现文件的异步上传</title>
</head>
<body>

<form id="ajax-upload-demo" enctype="multipart/form-data">
    <label>选择文件:</label>
    <input type="file" name="image"><br><br>
    <a href="javascript:uploadFile();">上传</a>
</form>
<br><p id="tips"></p>

<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script>

    var isUploading = false;

    // 上传文件
    function uploadFile(){
        var form = document.getElementById(\'ajax-upload-demo\');
        if(isUploading) {
            alert(\'文件正在上传...\');
            return false;
        }
        $.ajax({
            url: \'/index/index/uploadApi\',
            type: \'POST\',
            cache: false,
            data: new FormData(form),
            processData: false,
            contentType: false,
            dataType: \'json\',
            beforeSend: function () {
                isUploading = true;
            },
            success: function (json) {
                var arr = JSON.parse(json);
                if(arr.errcode == 10000){
                    // 上传成功
                    alert(\'上传成功\');
                    var url = arr.data.url;
                    var tips = "<a href=\'" + url + "\' target=\'_blank\'>点击查看</a>";
                    $("#tips").empty().append(tips);

                }else{
                    // 上传失败
                    alert(\'上传失败\');
                }
                isUploading = false;
            }
        });
    }
</script>
</body>
</html>

效果图:

PHP代码

<?php
namespace app\\index\\controller;

use think\\Controller;

class Index extends Controller
{
    // 上传表单页面
    public function index()
    {
        return $this->fetch();
    }

    // 上传文件接口
    public function uploadApi(){
        // 获取文件
        $file = request()->file(\'image\');
        if($file){
            // 校验数组
            $validateArr = [ \'ext\' => \'jpg,jpeg,gif,png,bmp\' ];
            // 文件的本地存储路径
            $path = ROOT_PATH . \'public\' . DS . \'upload\';
            // 校验并移动
            $info = $file->validate($validateArr)->move($path);
            // 检查移动结果
            if($info){
                // 上传成功

                // 输出 jpg
                #echo $info->getExtension();

                // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
                #echo $info->getSaveName();

                // 输出 42a79759f284b767dfcb2a0197904287.jpg
                #echo $info->getFilename();

                // 文件的原文件名
                $sourceInfo = $info->getInfo();
                $sourceName = $sourceInfo[\'name\'];

                // 拼装url
                $url = \'/upload/\'.$info->getSaveName();
                $url = str_replace(\'\\\\\', \'/\', $url); // Windows下替换路径分隔符

                // other some operations ...

                // 返回json,告知客户端上传结果
                $json = json_encode([
                    \'errcode\'   => \'10000\',
                    \'errmsg\'    => \'Upload success\',
                    \'data\'      => [ \'url\' => $url ]
                ]);
            }else{
                // 上传失败,返回json,告知客户端
                $json = json_encode([
                    \'errcode\'   => \'20002\',
                    \'errmsg\'    => \'Upload failed\',
                ]);
            }
        }else{
            // 未上传文件
            $json = json_encode([
                \'errcode\'   => \'20001\',
                \'errmsg\'    => \'File not uploaded\',
            ]);
        }
        return $json;
    }
}

上传测试

1. 上传一张图片

2. 上传成功

3. 点击查看

4. 查看图片

5. 查看上传目录

可能出现的错误

1. PHP的上传限制

解决方法
打开PHP的配置文件php.ini

  1. 查找max_execution_time,修改其值为60或更大
  2. 查找post_max_zise,修改其值为128M或更大
  3. 查找upload_max_filesize,修改其值为128M或更大

原因

  1. max_execution_time指的是一次请求最长的执行秒数。如果上传文件过大,则可能服务端还没有接收完文件就结束程序了;
  2. post_max_size指的是POST数据所允许的最大大小;
  3. upload_max_filesize指的是上传文件的最大大小。

本文链接:https://www.cnblogs.com/connect/p/thinkphp-ajax-upload.html

以上是关于ThinkPHP中jquery问题的主要内容,如果未能解决你的问题,请参考以下文章

基于php(Thinkphp)+jquery 实现ajax多选,反选,不选 删除数据 新手学习向

ThinkPHP JQuery Ajax 的实现实例

ThinkPHP+JQuery实现文件的异步上传

Thinkphp5中利用js/jQuery传递参数的方法

thinkphp前台使用JQuery跳转后台处理后回调

php+jQuery+Mysql找回密码----ThinkPHP