3

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);

}
4

1 に答える 1

2

の場合data、後でクエリ文字列に変換されるオブジェクトを渡すことを意味します。変数を渡しています。これには、DOMノードであるのtrackingようなものが含まれておりe.target.parentElement、実際にはさらに多くのプロパティが含まれています(他のDOMノードのように!)。このエラーは、DOMノードをクエリ文字列に変換する際に問題が発生したか、クエリ文字列が長すぎることが原因で発生する可能性があります。とにかく、DOMノードをサーバーに送信することはあまり意味がありません。

必要なものだけを送信し、クエリ文字列に合理的に変換できます。

于 2012-12-20T23:08:03.480 に答える