0

我不得不承认(可能从我之前的问题中可以看出)我对 Jquery 比较陌生。我懂一点 Java,但我的知识主要在于 CSS 和 HTML4/5。我正在做一个项目,我需要能够在地图上创建、移动和删除标记。我没有使用谷歌的 api 地图,而是将其设为自由形式,因此任何计划在理论上都可以奏效。然而到目前为止我遇到的问题是我的一个朋友在完成他的项目后把代码借给了我......我不完全理解我所看到的一些东西,我通常会问他,但他正在巡航(他真的把他的手机也留在了家里,所以没有人会打扰他)。


在第 9 行我不明白这个函数抓取器,它是抓取页面 html 还是位于页面上的函数?如果它确实从页面中获取数据,这是否意味着我必须重新创建该函数?主要问题是当我单击标记按钮创建一个新按钮时,它会锁定我的光标,但不允许我实际放置标记(就像事件没有被正确调用)。

此外,底部的 json 位......我认为 json 是一种完全独立的语言(独立)?


function newIssue(e)
  {
     var pos = $('#plan').offset();
     var x = e.pageX - pos.left;
     var y = e.pageY - pos.top;
     var u = x/$('#plan').width();
     var v = y/$('#plan').height();

 $.get('/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/', function(data)
     {
        var x = eval(data);
        var num = x.number;
        Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true});
        var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10);
        reclusterOnAddition(n);
        if (e.data.kind == 'Repairable')
           openIssue(num, true);

        $('#plan-wrapper').css('cursor', 'move');
        $('#plan').unbind('mousedown');
        $("div[id^='m']").show();
        panner.enable();
     }, 'json');
  }

<li><a href="javascript:prepNewIssue('Repairable')">Repairable</a></li>

我因为这样做而受到抨击,但我朋友的代码运行良好,我能够通过这种方式更好地理解它。基本上,您单击链接,它会在再次单击时将光标移至创建标记的位置,但是它会启用光标,但是当您再次单击时,不会创建任何内容,只是停留在“创建”循环中而没有创建。

4

2 回答 2

0

非常难以理解的问题,我在第 9 行看不到函数grabber。第 9 行确实执行了 jQuery 的$.get方法,该方法确实执行了AJAX 请求

此请求指定它期望返回 json,这意味着传递给回调函数 ( data) 的参数包含一些 json 格式的数据。(顺便说一句,JSON它不是一种独立的语言 - 它只是 Javascript)。

于 2013-07-03T20:11:00.167 回答
0

首先是Javascript:Java :: Carpet:汽车。

Javascript不是Java。事实上,从现在开始,我将使用它的正式名称 ECMAScript 来称呼它。

你在这里问了几个问题,但你开始说你不明白第 9 行的代码在做什么。

在 ECMAScript 中,您可以将一个函数作为参数传递给另一个函数。

$.get去并从服务器获取数据。该参数function(data) { ... }告诉 ECMAScript 在检索数据时要做什么。请记住,此块中的其他代码将继续执行,并且作为参数传递的函数在调用代码完成之前不会执行。(谷歌:javascript 事件循环)。

最后,'json'右大括号和逗号后面的字符串是$.get函数的另一个参数。它告诉 $.get 它正在处理什么样的数据,以便可以适当地处理它。

 $.get('/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/', function(data)
     {
        var x = eval(data);
        var num = x.number;
        Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true});
        var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10);
        reclusterOnAddition(n);
        if (e.data.kind == 'Repairable')
           openIssue(num, true);

        $('#plan-wrapper').css('cursor', 'move');
        $('#plan').unbind('mousedown');
        $("div[id^='m']").show();
        panner.enable();
     }, 'json');

至于您关于 JSON 是一种完全不同的语言的问题,这是不正确的。JSON 是“JavaScript Object Notation”的首字母缩写词。它是一种将数据表示为 Javascript (ECMAScript) 代码的方式。它严格来说是 ECMAScript 语言的一个子集。

下面是一些表示汽车信息的 JSON 示例:

{
    Year: 2013,
    Make: "Acura",
    Model: "TL",
    IsInService: true
    Drivers: [{
        FName: "Bob",
        LName: "Smith"
    }, {
        FName: "Sue",
        LName: "Smith"
    }]
}

更新:我知道这个答案运行时间有点长,但我将重构这段代码,以帮助您更好地理解正在发生的事情:

function newIssue(e)
  {
     var pos = $('#plan').offset();
     var x = e.pageX - pos.left;
     var y = e.pageY - pos.top;
     var u = x/$('#plan').width();
     var v = y/$('#plan').height();

     var ajaxTarget = '/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/';

     var callbackFunction = function(data)
     {
        var x = eval(data);
        var num = x.number;
        Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true});
        var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10);
        reclusterOnAddition(n);
        if (e.data.kind == 'Repairable')
           openIssue(num, true);

        $('#plan-wrapper').css('cursor', 'move');
        $('#plan').unbind('mousedown');
        $("div[id^='m']").show();
        panner.enable();
     };

     // Call $.get with three parameters,
     // ajaxTarget: tells $.get where to get data from.
     // callbackFunction: tells $.get what to do with the data.
     // 'json': tells $.get that we are getting json data.
     $.get(ajaxTarget, callbackFunction, 'json');
  }
于 2013-07-03T20:15:57.887 回答