2009-12-29 29 views
5

Ben bir isteğe geçmesi gerekiyor JSON çok veri vardır:AJAX POST istekleri urlencode yok '+'

$.ajax({ 
       type: "POST", 
       url: "http://"+HOST+"https://stackoverflow.com/users/rankings", 
       data: "friends="+JSON.stringify(friendsArr), 
       success: function(response){ 
        $("#rankings").html(response); 
       } 
      }); 

friendsArr JSON biçiminde nesnelerin bir dizidir. Sorun, bazı nesnelerin "+" ile veriye sahip olması ve doğru şekilde kodlanmamasıdır. Sunucu tarafında bir "" olarak gelir ve veri berbattır. Gerçekten tüm verileri tekrarlamak ve her bir değeri ayrı ayrı kodlamak zorunda mıyım? Daha kolay bir yol olmalı.

+0

olarak kullanın 'friendsArr' tam olarak mı? – Harmen

+0

JSON nesnesinin bir dizi – Tony

cevap

4

çiğ $.ajax biri vs $.post yöntemi kullanarak denemek, ve jQuery işi sizin halledeyim olacaktır:

$.post("http://"+HOST+"https://stackoverflow.com/users/rankings", 
    { friends: JSON.stringify(friendsArr) }, 
    function(data){ 
     $("#rankings").html(response); 
    } 
); 

Ayrıca, aynı etki alanındaki adreslere AJAX yoluyla yalnızca POST'u kullanabildiğiniz için, neden sadece "https://stackoverflow.com/users/rankings" URL'nizi "http://"+HOST+"https://stackoverflow.com/users/rankings"

+0

nesnesini karıştırmak gerektiğini düşünüyorum) (gerekli olmasa da) ama arkadaşlık etmek: "arkadaşlara" değil aksine yaptı. Ben jquery veri kaçmak ve içerik türünü düzgün bir şekilde ayarlamak söyler sanırım ... Ayrıca alan için gerek yok bana hatırlattığınız için teşekkürler! Veri için nesneyi kullanarak – Tony

+0

+1 dize daha iyidir –

4

Bu sorunu gidermek için javascript escape işlevini kullanabilmeniz gerekir. Göndermeden önce sadece verilerinden ve URL'nizden kaçış.

+0

no, bunu denedim. – Tony

+0

@Tony Veriden kaçtığınızda ne olur? '+' Hala bir boşluk olarak geri geliyor, ya da başka bir şey olarak geri geliyor? Muhtemelen sunucu kodunuzda çözmeniz gerekecektir. –

+0

doğru, bir "" olarak geliyor. Ben otomatik olarak decode gerektiğini raylar kullanıyorum ... ya da ben bazı çılgın hatalar olacağını düşünüyorum sanırım – Tony

1

kadar kolay değil mi gibidir:

$.ajax({ 
    type: "POST", 
    url: "http://"+HOST+"https://stackoverflow.com/users/rankings", 
    data: "friends="+escape(JSON.stringify(friendsArr)), 
    success: function(response){ 
     $("#rankings").html(response); 
    } 
}); 
+0

işe yaramazsa, ( – Tony