代码之家  ›  专栏  ›  技术社区  ›  Anwar Chandra

在触发器上传递json数据

  •  3
  • Anwar Chandra  · 技术社区  · 15 年前

    我正在调用一个返回json数据的服务。

    脚本:

    $.ajax({
        type: "POST",
        url: "/some/service",
        dataType: "json",
        success: function(response) {
            if (response.status == "ok" && response.messages.length > 0) {
    
                // obj is a jQuery object
                obj.trigger(SOME_EVENT, response.messages);
    
            }
        }
    });
    

    {
      "status":"ok",
      "messages":[
         {"id":1,"message_text":"latihan"},
         {"id":123,"message_text":"hello"}]
    }
    

    当obj收到SOME_事件触发器时,我希望它传递以下消息数据:

    [{"id":1,"message_text":"latihan"},
     {"id":123,"message_text":"hello"}]
    

    但当我将消息打印到控制台时,

    // on receiving messages
    obj.bind(SOME_EVENT, function(sender, messages) {
        console.log(messages);
    });
    

    {"id":123,"message_text":"hello"}
    

    任何人都可以解释为什么我的自定义事件不传递消息数组?

    2 回复  |  直到 15 年前
        1
  •  5
  •   Crescent Fresh    15 年前

    从…起 http://docs.jquery.com/Events/trigger ,第二个参数 trigger 函数是一个附加参数数组(在事件对象之后传递)。

    你的价值 response.messages

    obj.bind(SOME_EVENT, function(sender, message1, message2/*, etc*/) {
        console.log(message1); // {"id":1,"message_text":"latihan"}
        console.log(message2); // {"id":123,"message_text":"hello"}
    });
    

    您可以通过以下方式将它们作为一个阵列干净地收集:

    obj.bind(SOME_EVENT, function(sender) {
        var messages = Array.prototype.slice.call(arguments, 1);
        console.log(messages); // [{"id":1,"message_text":"latihan"},
                               //  {"id":123,"message_text":"hello"}]
    });
    
        2
  •  3
  •   jitter    15 年前

    答案是正确的,两种解决方案都有效。

    这是你的第三个选择。你可以打电话给 trigger -这样的方法

    obj.trigger(SOME_EVENT, new Array(response.messages));
    

    然后 console.log(messages);

    推荐文章