2012-03-17 50 views
12

cách dễ nhất để chuyển đổi chuỗi URL GET thành POST trong jQuery là gì?JQuery: Chuyển đổi GET URL thành POST

ví dụ: Tôi muốn các thông số của liên kết

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

để được gửi dưới dạng POST khi nhấp nếu javascript được kích hoạt. Không có AJAX, chỉ cần gửi biểu mẫu bình thường.

Bất kỳ ý tưởng nào?

Xin cảm ơn, Hannes.

+0

được cụ thể về yêu cầu của bạn .. không thể tìm ra prooblem của bạn là gì ?? –

+0

thấy điều này có thể hữu ích http://tomengineering.tripod.com/gettopost.html – elclanrs

+0

"Sự cố" là tôi chỉ muốn dữ liệu được gửi qua POST nếu javascript được kích hoạt. Tôi hình tôi có thể thêm một biểu mẫu ẩn dựa trên URL vào DOM khi đang di chuyển. Nhưng có cách nào dễ dàng hơn hay thanh lịch hơn không? – ottsch

Trả lời

12

tôi chỉ cần viết mã này, kiểm tra xin vui lòng, có thể là nó hữu ích 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

Cảm ơn, đó là những gì tôi đang tìm kiếm. – ottsch

+1

Chỉ cần thêm .attr ('phương thức', 'bài đăng): http://jsfiddle.net/xcpMk/ – ottsch

+0

Tại sao bạn lặp lại ".attr (' type ',' hidden '). Attr (' name ', khóa) .attr ('giá trị', giá trị) "? Điều này gây ra một lỗi IE8 trong jQuery và có vẻ là một lỗi đánh máy :) – AlfaTeK

-1

Bạn có thể gửi hình thức đầu vào sử dụng HTML phương pháp < hình thức = "POST">

Trong khi tôi không hoàn toàn chắc chắn về lý do đằng sau điều này, nếu bạn phải thực thi phần javascript, chỉ cần bao quanh nó với biểu mẫu < phương thức biểu mẫu = "GET"> với thẻ < noscript>.

3

demo: 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

đổi mã của Sergey một chút, để khi người dùng 'dao động' vào liên kết, nó không hiển thị yêu cầu get.

Link:

<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> 

Chuyển đổi 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; 
    }); 
});