Разбор параметра запроса jquery - "=" в строке запроса разбивает строку запроса - PullRequest
0 голосов
/ 30 августа 2011

Я пытаюсь проанализировать параметры из строки запроса, используя этот плагин jquery и пример строки запроса:

http://test.com/?xnJTqqWEclJnnPEvWH&cid=3DF3-00-=63-D4-DA-2F-91-6B-39-39-75-E4-C1-B7-28-12&mid=3D93-36-14-46-4D-52-9E-48-17-=6A-50-13-56-FA-0A-06&PROMO_MONTH=3D201106

Использование кода для плагина:

console.log($.getQueryParam( "cid" ));

cid делится в первом экземпляре знака "=" - поэтому вместо:

3DF3-00-=63-D4-DA-2F-91-6B-39-39-75-E4-C1-B7-28-12

я получаю

3DF3-00-

Это нормальное поведение?Знак равенства делает что-то особенное в этой строке запроса?Если нет, то как мне разобрать эту строку запроса, чтобы получить весь параметр?

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Сам плагин не был написан для размещения такой строки.Виновником является следующий фрагмент кода ...

if (params[0] == param) {
 return params[1] || '';
}

Незадолго до этого шага скрипт плагина делает split() со знаком равенства, создавая массив.Приведенный выше фрагмент кода должен быть изменен на что-то вроде следующего, чтобы ваш запрос работал ...

if (params[0] == param) {
    var paramOut = '';
    for (var p = 1; p < params.length; p++) {
        paramOut += params[p] + '=';
    }
    return paramOut.substr(0, paramOut.length - 1); // to remove the trailing equal sign
} else {
    return '';
}

Вот плагин, исправленный моими ревизиями на тот случай, если вы все еще заинтересованы в его использовании ....

(function($){$.getQueryParam=function(param){var pairs=location.search.substring(1).split('&');for(var i=0;i<pairs.length;i++){var params=pairs[i].split('=');if(params[0]==param){var paramOut='';for(var p=1;p<params.length;p++){paramOut+=params[p]+'=';}return paramOut.substr(0, paramOut.length-1);}else{return '';}}return undefined;};})(jQuery);
2 голосов
/ 30 августа 2011

Используйте взамен gup . Я вижу, что он используется во многих местах, и он работает хорошо. Это очень просто. Обратите внимание, что я внес небольшое изменение в скрипку в рожок для обуви в URL. Код ниже - это то, что вы должны использовать.

http://jsfiddle.net/mrtsherman/trqJ8/

gup('cid');

function gup( name )
{
 name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
 var regexS = "[\\?&]"+name+"=([^&#]*)";
 var regex = new RegExp( regexS );
 var results = regex.exec( window.location.href );
 if( results == null )
    return "";
 else
    return results[1];
}
1 голос
/ 30 августа 2011

Это так. «=» используется в качестве разделителя частей запроса, поэтому вам следует избегать его. Поисковая система Яндекса делает это так: http://yandex.ru/yandsearch?text=%3D

...