Нажмите Logging with JavaScript

Это алгоритм для произведения Кронекера. Может быть, я переключил v1 и v2

#include <vector>
#include <iostream>

using Matrix = std::vector<std::vector<double>>;

Matrix KroneckersProduct(Matrix v1, Matrix v2){
    Matrix v(v1.size() * v2.size(), std::vector<double>(v1[0].size() * v2[0].size()));
    for (std::size_t z1(0); z1 < v1.size(); ++z1) {
        for (std::size_t z2(0); z2 < v2.size(); ++z2) {
            for (std::size_t z3(0); z3 < v1[0].size(); ++z3) {
                for (std::size_t z4(0); z4 < v2[0].size(); ++z4) {
                    v[z1*v2.size() + z2][z3*v2[0].size() + z4] = v1[z1][z3] * v2[z2][z4];
                }
            }
        }
    }
    return v;
}

int main() {
    Matrix v1{{3, -1},{0, 5}};
    Matrix v2{{4,3,15}, {0, -5, 2}};

    Matrix v(KroneckersProduct(v1, v2));

    for (const auto& row : v) {
        for (const auto& cell : row) {
            std::cout << cell << " ";
        }
        std::cout << '\n';
    }
    return 0;
}

Выход:

12 9 45 -4 -3 -15 
0 -15 6 -0 5 -2 
0 0 0 20 15 75 
0 -0 0 0 -25 10 
6
задан gamue 19 March 2009 в 15:03
поделиться

4 ответа

Я начал бы избавляться от встроенного кода 'onclick' и связывать событие позже:

  <a href="http://google.com" rel="outbound" >Click</a>


   $("a[rel=outbound]").click(function(){ 
        var url = this.href; 
        $.ajax({
        async: false,
        type: "POST",
        url: "Logger.ff", //dynamic url to logging action
        data: {
                sid: 'abc123' //random data
                clicked: url
        },
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        cache: false
     });
     return true; 
  }); 

Кроме того, у Вас могло бы быть появление "Состояния состязания". В моем примере я установил асинхронный на ложь.

Это остановит функциональный возврат и переходить по ссылке, прежде чем запрос был выполнен.

Об асинхронном

Причина я использую async: false вот то, потому что со значением по умолчанию, aync верен, что означает, что запрос Ajax может только быть частично передан к тому времени, когда браузер видит return: true, и перешел далеко от страницы.

Это - то "состояние состязания", которое я упоминал. Здесь, это - низкая уловка, которая избегает его, заставляя браузер по существу остановиться, пока запрос не завершен, и затем разрешение браузера нажать на ссылку.

Более сложный ответ имел бы его, возвращают "false", (который уничтожит собственный компонент браузеров, "переходят по ссылке" поведение), и затем выполнение реального перенаправления в complete функция.

Это не без его собственного ума проблем и могло привести к медленному поведению просмотра, в то время как запросы завершаются, позволяя пользовательскому времени нажать на другие ссылки, которые, кажется, ничего не делают, и затем в конечном счете один запрос проходит в случайное время, и происходит на вид случайное перенаправление.

Следовательно, передовые решения включают блокирующуюся остальную часть страницы и предоставления своего рода признака прогресса, в то время как запрос завершается.

(И следовательно, сложность этого решения является порядком величины тяжелее для осуществления в простом примере, чем async: false )

4
ответ дан 10 December 2019 в 02:53
поделиться

Секунда больше серверного подхода, о котором Вы не могли думать, должно было бы иметь страницу, которая обрабатывает Ваши перенаправления и регистрирует данные затем.

Например:

<a href="LoggerRedirect.ff?url=http://google.com">Click</a>
1
ответ дан 10 December 2019 в 02:53
поделиться

Я думаю причина, которую FF приводит Вам, плохие результаты состоят в том, потому что Вы оставляете страницу, прежде чем действие займет время для выполнения. Как ссылка mhartman упоминает, используете ли Вы цель на своей внешней ссылке, она должна хорошо работать. Если Вы не можете сделать этого затем, Вам, вероятно, придется ожидать журнала для завершения, хотя можно видеть задержки навигации.

HTML-код

<a href="http://google.com" onclick="return loggClick(event);">Click</a>

function loggClick(e) {
  if (!e) e = window.event;

  e.preventDefault();  // cancels the link

  var theLink = this.href;  // stores the link for later

  $.ajax({
     async: false,
     type: "POST",
        url: "Logger.ff", //dynamic url to logging action
        data: {
            sid: 'abc123' //random data
        },
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        cache: false,
         complete: function() {
           // navigate when the log completes
           this.location.href = theLink;
         }
    });
    return true;
  }
}
4
ответ дан 10 December 2019 в 02:53
поделиться

Вышеупомянутый плакат корректен, это ненадежно, потому что Вы оставляете страницу, прежде чем это будет иметь шанс зарегистрировать его.

Вы могли сделать это:

1) возвратите false, таким образом, href не активен. 2) зарегистрируйте нажимание 3) использования location.href для перенаправления к URL, к которому оно было бы перенаправлено

Вы могли бы видеть небольшую задержку, если она занимает много времени, чтобы Ваш onclick обработчик выполнился.

0
ответ дан 10 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: