javascript - ajax请求运用同一个请求函数发送有查询参数和无查询参数发生问题?
阿神
阿神 2017-04-11 13:09:23
[JavaScript讨论组]

代码如下:




    
    Document


    



  • 该代码可直接运行。我现在创建了一个ajax请求函数,其中包括发送查询参数。

  • 运用这个get函数发起两个请求,根据设计的接口,请求需要查询参数,请求2不需要参数。

  • 已经确认查询参数是没有错的。

  • 请求1有查询参数,结果可以成功返回结果

  • 请求2是没有查询参数的,结果报错“Uncaught TypeError: callback is not a function”

  • 如果修改get函数,去掉传入查询参数,和查询参数的处理部分,只运行请求2,可以成功返回数据。

  • 问题1:报错的原因是什么?明明有把huidiao这一个函数当作参数传进去了啊为什么不能识别出callback就是huidiao?

  • 问题2:请问如果像这样函数里需要传入参数,并会对参数进行处理的,如果没有传入(可能有些情况并不需要),那么函数会忽略需要传入参数部分还是会怎么样?

  • 像这样怎么写一个函数,可以兼容这两种情况,需要传参数的时候可以用,不需要传参数的时候也可以用?

那我改了还是不行?




    
    Document


    


阿神
阿神

闭关修行中......

全部回复(2)
PHP中文网

请求二只传入了2个参数,而get函数里面第三个参数才是回调。

function get(url,options,callback){
        callback === undefined && $.isFunction(options) && (callback = options); // 所以这里要先进行判断

        var xhr=new XMLHttpRequest();
        xhr.onreadystatechange=function(){
            if (xhr.readyState==4){
                if((xhr.status>=200 && xhr.status<300) || xhr.status==304){
                    callback && callback(xhr.responseText);
                }else{
                    alert("request failed:"+xhr.status);
                }
            }    
        }
        xhr.open("get",url+"?"+serialize(options),true);
        xhr.send(null);
    }
PHP中文网
function get(url,options,callback){
        if(!callback){
            callback = options;
            options={};
        }
        var xhr=new XMLHttpRequest();
        xhr.onreadystatechange=function(){
            if (xhr.readyState==4){
                if((xhr.status>=200 && xhr.status<300) || xhr.status==304){
                    callback(xhr.responseText);
                }else{
                    alert("request failed:"+xhr.status);
                }
            }    
        }
        xhr.open("get",url+"?"+serialize(options),true);
        xhr.send(null);
    }

callback不存在的时候,options 的位置其实是传入的callback ,此时直接把options复制给callback 就可以了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号