V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
swuhvxee
V2EX  ›  问与答

新手问一个字符串当作另一个函数参数的问题

  •  
  •   swuhvxee · 2017-04-10 15:56:35 +08:00 · 1194 次点击
    这是一个创建于 2809 天前的主题,其中的信息可能已经有所发展或是发生改变。

    html:

    <button data="'1','2','3'"><button>
    

    js:

    $("button").click(function(){
       var abc = $(this).attr("data");
       ajax(abc);
    });
    
    function ajax(biao,class,id){
       $.ajax({
          type: "post",
          url: url,
          data:{'biao':biao, 'class':class, 'id':id}
          dataType: "html",
          success: function ()
          {
            alert("成功");
          }
       });
    }
    

    ajax 出现了问题,在 chrome 中观察请求头正常情况下应该是:

    biao :'1'
    class:'2'
    id:'3'
    

    但是现在出现如下这个现象

    biao:'1','2','3'
    

    也就是说, data 的数据全部给了 biao 了,这是什么原因呢?

    7 条回复    2017-06-07 20:47:55 +08:00
    Mikewu
        1
    Mikewu  
       2017-04-10 16:11:58 +08:00   ❤️ 1
    你本来就只传给 ajax 有一个参数 biao: "'1','2','3'",将 abc 切割一下吧
    var abc = $(this).attr("data").split(",");
    ajax(abc[0], abc[1], abc[2]);
    chairuosen
        2
    chairuosen  
       2017-04-10 16:13:50 +08:00
    1 原因。看 jQuery 文档 attr 返回什么, js 文档函数参数如何传递。
    2 解决方案, data-something="[1,2,3]"; var abc = $(this).data('something'); ajax.apply(null,abc) 应该就可以了
    otakustay
        3
    otakustay  
       2017-04-11 13:36:33 +08:00
    ajax.apply(null, abc.split(','))
    zyzzzz
        4
    zyzzzz  
       2017-06-07 20:43:19 +08:00
    mark 一下,学习
    swuhvxee
        5
    swuhvxee  
    OP
       2017-06-07 20:47:25 +08:00
    第一个和第二个是对的,你可以参考
    zyzzzz
        6
    zyzzzz  
       2017-06-07 20:47:47 +08:00
    明白
    zyzzzz
        7
    zyzzzz  
       2017-06-07 20:47:55 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3203 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:14 · PVG 20:14 · LAX 04:14 · JFK 07:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.