2016-08-02 2 views
1

Я пытаюсь поставить водяной знак в Js файловых запросов через RequireJs:JavaScript массив присоединиться() причина нулевой (% 00) символ в результате

requirejs.config({ 
    baseUrl: '/app', 
    urlArgs: [98, 121, 65, 68, 77].map(String.fromCharCode).join('')+'&v=1.0.0' 
}); 

По некоторым причинам я не могу поставить byADM напрямую, поэтому я написал выше кода.
Моя проблема заключается в том, что после объединения символов он показывает b%00%00y%01%00A%02%00D%03%00M%04%00&v=1.0.0 вместо byADM&v=1.0.0 в URL. это выглядит как '' конвертировать в %00.
Что я могу сделать, чтобы получить удовольствие от этого?
Есть ли какой-либо реальный пустой символ в библиотеке String или что-то еще?

+1

Испытано код в консоли, работает отлично. Получаете ли вы правильные результаты, когда вы просто «сопоставляете», «присоединяетесь», «+»? – Georgy

+0

@Georgy Да, в консоли его ОК, но я сказал, что моя проблема в том, что эта строка идет в URL-адресе. –

+0

@Georgy: Это _looks_ fine, потому что вы не видите эти символы/байтовые значения при использовании console.log. Сначала примените encodeURIComponent, и вы увидите, что они отображаются. – CBroe

ответ

2

Array.prototype.map проходит три аргумента обратного вызова: currentValue, index, array. String.fromCharCode принимает любое количество аргументов, преобразовывая их все за один раз. По сути, вы звоните String.fromCharCode(98, 0, []), пропустив String.fromCharCode непосредственно как обратный вызов map.

Вам нужно отбраковать дополнительные аргументы:

[98, 121, 65, 68, 77].map((c) => String.fromCharCode(c)) 

Но вместо того, чтобы бороться это поведение, вы можете также использовать способность String.fromCharCode «s, чтобы принять любое количество аргументов, чтобы упростить код:

String.fromCharCode.apply(String, [98, 121, 65, 68, 77]) + '&v=1.0.0' 

Или, вы знаете ...

String.fromCharCode(98, 121, 65, 68, 77) + '&v=1.0.0' 
+0

Спасибо за завершение @CBroe answere. –

+1

Это лучший ответ, я думаю. Я подозревал, что это имеет какое-то отношение к параметрам, переданным функции обратного вызова, но не просмотрел его подробно. @ MeTe-30, вы, вероятно, должны согласиться с этим. – CBroe

+0

Я просто уважаю приоритет, спасибо @CBroe –

2

Я не знаю, почему именно, но, похоже, вам нужно обернуть String.formCharCode в дополнительной анонимной функции:

urlArgs: [98, 121, 65, 68, 77].map(
    function(c) { 
    return String.fromCharCode(c); 
    } 
).join('')+'&v=1.0.0' 
Смежные вопросы