2011-06-06 13 views
53

मैं जेसन को उसी सर्वर पर एक वेब सेवा पर पोस्ट करना चाहता हूं। लेकिन मुझे नहीं पता कि JQuery को JQuery का उपयोग कैसे करें। मैं इस कोड के साथ की कोशिश की है:JSON डेटा पोस्ट करने के लिए मैं JQuery का उपयोग कैसे कर सकता हूं?

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

लेकिन इस JQuery कोड डेटा सर्वर पर JSON के रूप में प्राप्त नहीं होता है का उपयोग कर। यह सर्वर पर अपेक्षित डेटा है: {"name":"jonas"} लेकिन JQuery का उपयोग कर सर्वर को name=jonas प्राप्त होता है। या दूसरे शब्दों में, यह "urlencoded" डेटा है और जेसन नहीं।

क्या JQuery का उपयोग करते हुए urlencoded डेटा के बजाय जेसन प्रारूप में डेटा पोस्ट करने का कोई तरीका है? या क्या मुझे मैन्युअल AJAX अनुरोध का उपयोग करना है?

उत्तर

111

आप एक ऑब्जेक्ट पास कर रहे हैं, एक JSON स्ट्रिंग नहीं है। जब आप ऑब्जेक्ट पास करते हैं, तो jQuery नाम-मूल्य जोड़े में ऑब्जेक्ट को क्रमबद्ध करने के लिए $.param का उपयोग करता है।

आप एक स्ट्रिंग के रूप डेटा पास है, यह धारावाहिक नहीं होगा: lonesomeday के जवाब पर

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

कृपया $ .ajax के बजाय $ .post का उपयोग करें। – user3746259

+0

@ user3746259 हू? – lonesomeday

+0

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

4

बेस, मैं एक jpost कि कुछ मापदंडों लपेटता पैदा करते हैं।

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

उपयोग:

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

Promise का उपयोग करना है और अगर body वस्तु एक मान्य JSON है जाँच। यदि कोई वचन reject वापस नहीं किया जाएगा।

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 
      }); 
    }); 
}