Как получить доступ к URL-адресу запроса GET AJAX? - PullRequest
2 голосов
/ 20 мая 2011

Я взглянул на некоторые другие вопросы, но я все еще не уверен, как этого добиться.

Ситуация такова, что у меня была сложная форма, которая статически работала нормально, но я "сделал ее лучше", сделавона отправляется с использованием запроса AJAX.

Теперь URL-адрес страницы не изменяется, чтобы в ней были параметры, как раньше, но я вижу полный URL-адрес с помощью firebug.

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

Извините, если в любом случае это точная копия, но любаяпомощь и совет очень важны.

Это мой запрос (ы) AJAX (в основном они одинаковы, но у меня есть две формы, представленные пользователю как одна форма, простой поиск и переключенный расширенный поиск):

// setup AJAX request for simple search
$simpleform = $('#search');
$simpleform.submit(function() {
    $.ajax($simpleform.attr('action'), {
        data: $simpleform.serialize(),
        dataType: 'html',
        url: 'docsearch.php',
        type: 'GET', 

        beforeSend: function() {
            var $load = $('#loadingmessage');
            $('#search_results').fadeOut(1000);
            $load.hide().fadeIn(1000);

            if (!$load.length)
            {
                $load = $('<div id="loadingmessage">').appendTo($('#placeholder'));
            }

            $load.html('Searching... Please wait...');

            // disable both search buttons
            $('.submit').attr('disabled', 'disabled');
            $('.submit').addClass("disabled");

            $('#advancedsearchbutton').attr('disabled', 'disabled');
            $('#advancedsearchbutton').addClass("disabled");
        },

    success: function(response) {
        // response is the text sent back by server

        // find the search_results div in the response and insert it after the placeholder div
        $(response).find('#search_results').insertAfter($('#placeholder')).fadeIn(1000); 
        // re-initialise lightbox and dataTable plugins
        $('a.lightbox').lightBox();
        $('#test-docs-table').dataTable( {
                "sPaginationType": "full_numbers",
                "sDom": 'Rlfrtip',
                "aoColumns": [
                    null,
                    null,
                    { "sType": "title-numeric" },
                    null
                ]
        });
    },

    complete: function() {
        // hide loading message:
        $('#loadingmessage').fadeOut('slow');

        // enable both search buttons
        $('.submit').removeAttr("disabled");
        $('.submit').removeClass("disabled");

        checkDropdowns();
    }
});

return false; // Cancel default event
});
// end AJAX request

// setup AJAX request for advanced search
$form = $('#advancedsearchform');
$form.submit(function() {
    $.ajax($form.attr('action'), {
        data: $form.serialize(),
        dataType: 'html',
        url: 'docsearch.php',
        type: 'GET', 

        beforeSend: function() {
            var $load = $('#loadingmessage');
            $('#search_results').fadeOut(1000);
            $load.hide().fadeIn(1000);

            if (!$load.length)
            {
                $load = $('<div id="loadingmessage">').appendTo($('#placeholder'));
            }
              $load.html('Searching... Please wait...');

            // disable both search buttons
            $('.submit').attr('disabled', 'disabled');
            $('.submit').addClass("disabled");

            $('#advancedsearchbutton').attr('disabled', 'disabled');
            $('#advancedsearchbutton').addClass("disabled");
        },

    success: function(response) {
        // response is the text sent back by server

        // find the search_results div in the response and insert it after the placeholder div
        $(response).find('#search_results').insertAfter($('#placeholder')).fadeIn(1000); 
        // re-initialise lightbox and dataTable plugins
        $('a.lightbox').lightBox();
        $('#test-docs-table').dataTable( {
                "sPaginationType": "full_numbers",
                "sDom": 'Rlfrtip',
                "aoColumns": [
                    null,
                    null,
                    { "sType": "title-numeric" },
                    null
                ]
        });
    },

    complete: function() {
        // hide loading message:
        $('#loadingmessage').fadeOut('slow');

        // enable both search buttons
        $('.submit').removeAttr("disabled");
        $('.submit').removeClass("disabled");

        $('#advancedsearchbutton').removeAttr("disabled");
        $('#advancedsearchbutton').removeClass("disabled");
    }
});

return false; // Cancel default event
});
// end AJAX request

Ответы [ 5 ]

1 голос
/ 20 мая 2011

jQquery передает исходный объект XHR обработчикам событий.Вы можете использовать это.В вашем случае это может быть что-то вроде этого:

success: function(response, status, hxr) {
    var whereFrom = xhr.responseXML.baseURI;

    (...)
}
1 голос
/ 20 мая 2011

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

Я бы сделал то, что рекомендует @Keith, но, поскольку закладки страниц - это проблема на стороне клиента, я бы собрал все вместеURL-адрес на стороне клиента в обработчике успеха.

1 голос
/ 20 мая 2011

Возможно, вы захотите вернуть полный URL-адрес (с параметрами) как часть вашего ответа, а затем обработать его в блоке success:.

1 голос
/ 20 мая 2011

Я думаю, вы захотите использовать глубокую ссылку , чтобы помочь вам связать непосредственно с результатами поиска. Вы можете использовать строку запроса, если хотите (например, domain.com/search.php?q=Whatever), но, возможно, имеет смысл использовать вместо этого хэш и декодировать его (т.е. domain.com/search.php#q=Whatever).

1 голос
/ 20 мая 2011

Я не уверен, почему это вообще вопрос.URL-адрес HTTP-запроса является первым аргументом $.get().В данном случае это значение, возвращаемое

$('#search').attr('action');

и

$('#advancedsearchform').attr('action');

соответственно.

Возможно, я что-то здесь упускаю?


Редактировать:

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

Вы можете вставить строку в объект jQuery, а затем добавить ее куда-нибудь:

var action = $('#search').attr('action'),
    $span = $('<span/>', {text: action});

$('#placeholder').after($span);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...