麻烦jQuery ajax

时间:2012-12-20 23:04:35

标签: javascript ajax jquery

我在FF,Chrome和IE中遇到了不同的错误,但这一切都归结为$ .ajax中的数据出错。以下是代码。如果我犯了一个愚蠢的错误,请放轻松。我花了几个小时研究这个并且无法弄明白。任何帮助赞赏。

已修改为包含错误消息

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

Chrome错误消息: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);

}

1 个答案:

答案 0 :(得分:2)

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

只发送必要的内容并合理地转换为查询字符串。