2011-06-06 26 views
53

Json'u aynı sunucudaki bir web hizmetine göndermek istiyorum. Ama JQuery'yi kullanarak Json'u nasıl yayınlayacağımı bilmiyorum. Bu kod ile denedim:JSQ verilerini göndermek için JQuery'yi nasıl kullanabilirim?

$.ajax({ 
    type: 'POST', 
    url: '/form/', 
    data: {"name":"jonas"}, 
    success: function(data) { alert('data: ' + data); }, 
    contentType: "application/json", 
    dataType: 'json' 
}); 

Fakat veri sunucusunda Json olarak alınmazsa bu JQuery kodu kullanarak. Bu sunucuda beklenen veri: {"name":"jonas"} ancak JQuery kullanarak sunucu name=jonas alır. Ya da başka bir deyişle, "urlencoded" veri ve Json değil.

Verileri JQuery'yi kullanarak kodlanmış veriler yerine Json biçiminde yayınlamanın bir yolu var mı? Veya manuel ajax isteğini kullanmak zorunda mıyım?

cevap

111

Bir nesneyi, bir JSON dizesinden geçmiyorsunuz. Bir nesneyi geçirdiğinizde jQuery, nesneyi isim-değer çiftlerine serileştirmek için $.param'u kullanır. Eğer bir dize olarak veri aktarmak durumunda

, bu tefrika olmayacaktır: lonesomeday en yanıta

$.ajax({ 
    type: 'POST', 
    url: '/form/', 
    data: '{"name":"jonas"}', // or JSON.stringify ({name: 'jonas'}), 
    success: function(data) { alert('data: ' + data); }, 
    contentType: "application/json", 
    dataType: 'json' 
}); 
+3

Lütfen $ .ajax yerine bunun yerine $ .post kullanın. – user3746259

+0

@ user3746259 Huh? – lonesomeday

+0

http://api.jquery.com/jquery.post/ – user3746259

4

Baz, ben belirli parametreleri sarar bir jpost oluşturun.

$.extend({ 
    jpost: function(url, body) { 
     return $.ajax({ 
      type: 'POST', 
      url: url, 
      data: JSON.stringify(body), 
      contentType: "application/json", 
      dataType: 'json' 
     }); 
    } 
}); 

Kullanımı:

$.jpost('/form/', { name: 'Jonh' }).then(res => { 
    console.log(res); 
}); 
-3

Promise Kullanılması ve body nesne geçerli bir JSON olup olmadığını kontrol ediyor. Eğer bir Promise değilse reject iade edilecektir.

var DoPost = function(url, body) { 
    try { 
     body = JSON.stringify(body); 
    } catch (error) { 
     return reject(error); 
    } 
    return new Promise((resolve, reject) => { 
     $.ajax({ 
       type: 'POST', 
       url: url, 
       data: body, 
       contentType: "application/json", 
       dataType: 'json' 
      }) 
      .done(function(data) { 
       return resolve(data); 
      }) 
      .fail(function(error) { 
       console.error(error); 
       return reject(error); 
      }) 
      .always(function() { 
       // called after done or fail 
      }); 
    }); 
} 
İlgili konular