2012-03-17 1 views
12

Какой самый простой способ конвертировать строку GET URL в POST в jQuery?JQuery: конвертировать GET-адрес в POST

например. Я хочу, чтобы параметры ссылки

<a href="/somepage?x=1&amp;y=3" id="postlink">link</a> 

, которые должны быть отправлены как POST onclick, если активирован javascript. Нет AJAX, только обычная форма.

Любые идеи?

Спасибо, Ханнес.

+0

конкретно о вашем требовании .. не могу понять, что ваш prooblem ?? –

+0

нашел, что это может быть полезно http://tomengineering.tripod.com/gettopost.html – elclanrs

+0

«Проблема» в том, что я хочу, чтобы данные передавались только через POST, если активирован javascript. Я полагаю, что я мог бы добавить скрытую форму, основанную на URL-адресе DOM на лету. Но есть ли более простой или элегантный способ? – ottsch

ответ

12

Я просто пишу этот код, пожалуйста, проверьте, может быть полезным http://jsfiddle.net/AEwxt/

$('#postlink').click(function() { 
    var p = $(this).attr('href').split('?'); 
    var action = p[0]; 
    var params = p[1].split('&'); 
    var form = $(document.createElement('form')).attr('action', action).attr('method','post'); 
    $('body').append(form); 
    for (var i in params) { 
     var tmp= params[i].split('='); 
     var key = tmp[0], value = tmp[1]; 
     $(document.createElement('input')).attr('type', 'hidden').attr('name', key).attr('value', value).appendTo(form); 
    } 
    $(form).submit(); 
    return false; 
}); 
+0

Спасибо, вот что я искал. – ottsch

+1

Просто нужно добавить .attr ('method', 'post): http://jsfiddle.net/xcpMk/ – ottsch

+0

Почему вы повторяете «.attr (' type ',' hidden '). Attr (' name ', ключ) .attr ('value', value) "? Это вызывает ошибку IE8 в jQuery и кажется опечаткой :) – AlfaTeK

-1

Вы можете отправить форму ввода с помощью HTML метод < формы = "POST">

В то время как я не полностью уверенный в обоснованности этого, если вы должны обеспечить выполнение части javascript, просто окружайте его формой с помощью метода < form method = "GET"> с тегом < noscript>.

3

демо: http://jsfiddle.net/w5WA6/

function getUrlVars(_url) 
{ 
    var vars = [], hash; 
    var hashes = _url.slice(_url.indexOf('?') + 1).split('&'); 

    for(var i = 0; i < hashes.length; i++) 
    { 
     hash = hashes[i].split('='); 
     vars.push(hash[0]); 
     vars[hash[0]] = hash[1]; 

    } 

    return vars; 
} 

var arVars = getUrlVars($("#test").attr("href")); 
for(var i=0;i<arVars.length;i++){ 
    //put var in input for submition you can change type by `hidden` 
    $("#myForm").append("<input type='text' value='"+arVars[arVars[i]]+"' name='"+arVars[i]+"'/>"); 
} 
​ 
2

Модифицированный код Сергея немного, так что, когда пользователь «парит» на ссылку, он не отображается запрос GET.

Ссылка:

<a href="#" postURL="/tpl/schRosterSearchSubmit.do?searchReci.uniqueId=&searchReci.studentId=&searchReci.schoolId=3205&searchReci.name.firstName=&searchReci.name.lastName=&searchReci.gender=&searchReci.rdobDay=&searchReci.rdobMonth=&searchReci.rdobYear=&searchReci.rssn1=&searchReci.rssn2=&searchReci.rssn3=&searchReci.phoneNumber=&searchReci.citzOrResAlien=&searchReci.country.isoCountryCode=&searchReci.address.street1=&searchReci.address.street2=&searchReci.address.city=&searchReci.address.state=&searchReci.address.zip=&searchReci.address.zipExt=&searchReci.parentN.firstName=&searchReci.parentN.lastName=&searchReci.parentEmail=&searchReci.parentMAddr.street1=&searchReci.parentMAddr.street2=&searchReci.parentMAddr.city=&searchReci.parentMAddr.state=&searchReci.parentMAddr.zip=&searchReci.parentMAddr.zipExt=&searchReci.parentPAddr.street1=&searchReci.parentPAddr.street2=&searchReci.parentPAddr.city=&searchReci.parentPAddr.state=&searchReci.parentPAddr.zip=&searchReci.parentPAddr.zipExt=&searchReci.pdobDay=&searchReci.pdobMonth=&searchReci.pdobYear=&searchReci.pssn1=&searchReci.pssn2=&searchReci.pssn3=&searchReci.parentCitzOrResAlien=&searchReci.parentCountry.isoCountryCode=&searchReci.addrUpdInd=&searchReci.inactiveDtDay=&searchReci.inactiveDtMonth=&searchReci.inactiveDtYear=&searchReci.ncoaUpdInd=&searchReci.badAddrInd=&branding=upromise&acct=XXXX&schRosterPager.offset=50" class="rnavLink">2nd Page results</a> 

Преобразование в POST OnClick:

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.rnavLink').click(function() { 
     var p = $(this).attr('postURL').split('?'); 
     var action = p[0]; 
     var params = p[1].split('&'); 
     var form = $('<form/>', {action:action, method:'post'}).appendTo('body'); 
     for (var i in params) { 
      var tmp = params[i].split('='); 
      var key = tmp[0], value = tmp[1]; 
      $('<input/>', {type:'hidden', name:key, value:value}).appendTo(form); 
     } 
     $(form).submit(); 
     return false; 
    }); 
});