3

我在 FF、Chrome 和 IE 中遇到了不同的错误,但归根结底,$.ajax 中的数据存在错误。以下是代码。如果我犯了一个愚蠢的错误,请放轻松。我花了几个小时研究这个,但无法弄清楚。任何帮助表示赞赏。

编辑以包含错误消息

FF 错误信息:NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument

铬错误消息:Uncaught TypeError: Illegal invocation

IE9 错误信息:SCRIPT65535: Argument not optional

这是代码

    mc.mc_data.click_tracking = [];
var sequence = 0;
var send_it;
// the container click event will record even extraneous clicks.  need to change it to extending the jquery on click handler
$('#container').on('click', function(event) {
    logClicks(event);
    if(!send_it){
        sendIt()
    }
    sequence++;
});


function sendIt(){
    var tracking = mc.mc_data.click_tracking;
    var url = '/ajax/click_trackin';
    console.log("clicks["+sequence+"] "+$.isArray(tracking));
    $.each(tracking, function(i,v){
        console.log(i + v.innerText + " - " + v.sequence);
    });
    send_it = window.setInterval(function(){
        $.ajax({
            type: 'POST',
            url: url,
            data: {
                clicks:tracking
            },
            success: function(response)
            {
                if(response.result.length<1){
                    console.log(response+ ': no response');
                }else{
                    console.log(response);
                    tracking = mc.mc_data.click_tracks = [];                            
                }
                mc.mc_data.click_tracks = [];
                clearInterval(send_it);
                sendIt();
            },
            error: function(a, b, c){
                console.log(a+" - " + b+" - "+ c);
                clearInterval(send_it);
            }
        });

    }, 5000);
}


//

function logClicks(e){
    var temp_click = {
      'business_id':window.mc.businessid, 
      'userid':window.mc.userid, 
      'timestamp':e.timeStamp,
      'leg':window.mc.currentLeg,
      'workflow': 'dummy data',
      'sequence': sequence,
      'type':e.type, 
      'target':e.target, 
      'parent': e.target.parentElement,
      'id':e.target.id, 
      'class':e.className,
      'innerText': $(e.target).text()
    }
    mc.mc_data.click_tracking.push(temp_click);

}
4

1 回答 1

2

对于data,您应该传递一个对象,该对象稍后将转换为查询字符串。您正在传递变量tracking,其中包含类似 的内容e.target.parentElement,它是一个 DOM 节点,包含许多其他属性(如其他 DOM 节点!)。该错误可能源于将 DOM 节点转换为查询字符串时遇到问题,或者创建了太长的查询字符串。无论如何,将 DOM 节点发送到服务器没有多大意义。

只发送必要且可以合理转换为查询字符串的内容。

于 2012-12-20T23:08:03.480 回答