Передача значения в функцию JS через URL при загрузке окна - PullRequest
3 голосов
/ 14 октября 2011

моя страница http://www.dinomuhic.com/2010/index.php загружает Showreel в начале страницы с помощью вызова onLoad в теле, подобном следующему:

<body onLoad="sndReq('96')">

96 - это идентификатор showreel в библиотеке SQL.Функция JS "sndReq" - это вызов AJAX с использованием JQuery, который открывает запрошенный элемент и отображает его в главном окне.

Теперь мой вопрос: что делать, если я хочу отправить ссылку клиенту, который открывает определенныйэлемент, чтобы ему не приходилось перемещаться по сайту?

Что-то вроде http://www.dinomuhic.com/2010/index.php?sndReq=234 (что, конечно, сейчас не работает и просто открывает showreel, вероятно, потому, что onLoad в теге bodyпереопределяет)

Как я могу это реализовать?Я хочу иметь возможность открывать определенные элементы по URL, но если через URL ничего не пропускается, всегда следует открывать элемент 96.

Заранее благодарю.Я уверен, что это довольно легко, я просто не вижу этого.

Cletus

Ответы [ 3 ]

5 голосов
/ 14 октября 2011

Вам необходимо проанализировать строку запроса. Я считаю, что самый простой способ справиться со строкой запроса - это сделать следующее. Сначала вам нужно извлечь строку запроса из URL:

var queryStr = window.location.search; // will give you ?sndReq=234

Затем вы можете удалить ? и разбить каждый параметр строки запроса на массив:

var paramPairs = queryStr.substr(1).split('&');

Теперь вы можете построить объект хеш-таблицы из пар имя / значение, составляющих строку запроса:

var params = {};
for (var i = 0; i < paramPairs.length; i++) {
    var parts = paramPairs[i].split('=');
    params[parts[0]] = parts[1];
}

В вашем onload теперь вы можете использовать параметр следующим образом:

sndReq(params.sndReq);

Убедитесь, что код выполняется внутри скрипта в head вашего документа, чтобы он вычислялся до выполнения onload.

4 голосов
/ 14 октября 2011

если вы используете jQuery, почему бы не использовать обработчик DOM-ready вместо onload? на этой ноте, если это просто ajax-запрос, вам даже не нужно ждать готовности к DOM. если вы проанализируете запрос, вы сможете передать его в существующую функцию.

// Wait for DOM-ready, may not be needed if you are just
// making a request, up to you to decide :)
$(function() {
    // window.location.search represents the query string for
    // current URL, including the leading '?', so strip it off.
    var query = window.location.search.replace(/^\?/, "");

    // If there is no query, default to '96'
    if ( !query ) {
        query = '96';
    }

    // Call existing function, passing the query value
    sndReq( query );
});

надеюсь, это поможет! веселит.

1 голос
/ 14 октября 2011

Вы можете использовать RegExp для этого, прочитать параметры URL и передать их в ajax.

этот простой скрипт будет читать текущий URL и проходить через регулярные выражения для фильтрации указанных вами параметров.

  • EG: ThisReq = gip ('sndReq'); извлекает sndReq и значение из URL.

<script language="javascript">
    function gip(name) {
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(window.location.href);
        if (results == null)
            sndReq('96');
         else
            return results[1];
    }
    // parameter pulled from url.
    ThisReq = gip('sndReq');
    // executes function sndReq();
    sndReq(''+ThisReq+'');
</script>

...