2013-06-04 8 views
5

को पुनर्स्थापित करें मैं जानना चाहता हूं कि /:parameter में एक सरल JSON स्ट्रिंग को पुन: स्थापित करने के लिए क्यों मुश्किल है। मैंने कई उदाहरणों का पालन किया है लेकिन कुछ भी ठोस नहीं मिला है।पोस्ट jQuery JSON ऑब्जेक्ट को NodeJs को

मेरे पास फ्रंट एंड में निम्न कोड है।

$("#btnDoTest").click(function() { 

    var jData = { 
     hello: "world" 
    }; 
    var request = $.ajax({ 
     url: "http://localhost:8081/j/", 
     async: false, 
     type: "POST", 
     data: JSON.stringify(jData), 
     contentType: "application/javascript", 
     dataType: "json" 
    }); 


    request.success(function(result) { 

     console.log(result); 

    }); 

    request.fail(function(jqXHR, textStatus) { 
     alert("Request failed: " + textStatus); 
    }); 


}); 

मैं साधारण पाठ भेजने अगर मैं j/ के बाद परम श्रेणीबद्ध में सफल रहा हूँ। लेकिन मैं जो भेजना चाहता हूं वह इस तरह की वस्तु है {hello:"world"} और इसे वापस नोडजेएस में पुनर्निर्मित करें और इसके साथ काम करें।

--Edit:

This is my nodejs file 
/* the below function is from restifylib/response.js */ 
var restify = require("restify"); 

/* create the restify server */ 
var server = restify.createServer({ 

}); 


server.use(restify.bodyParser({ mapParams: true })); 

server.use(
    function crossOrigin(req,res,next){ 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    return next(); 
    } 
); 


server.post('/j/', function (req, res, next) { 


    //res.send(201,"REceived body: "+JSON.stringify(req.params)); 
    res.send(201,"REceived body: "+JSON.stringify(req.params)); 
    return next(); 
}); 


var port = 8081; 
server.listen(port); 
console.log("Server listening on port " +port) 

किसी भी मदद के लिए धन्यवाद की सराहना की जाएगी।

0x

उत्तर

6

मुझे अंततः यह काम मिल गया।

--Front अंत कोड

$("#btnDoTest").click(function() { 



     var request = $.ajax({ 

      url: "http://localhost:3000/j", 
      async: false, 
      type: "POST", 
      data: { 
       blob: {wob:"1",job:"2", ar:[1,2,{a:'b'}]} 
      }, 

      contentType: "application/x-www-form-urlencoded", //This is what made the difference. 
      dataType: "json", 

     }); 


     request.success(function(result) { 

      console.log(result); 

     }); 

     request.fail(function(jqXHR, textStatus) { 
      alert("Request failed: " + textStatus); 
     }); 


    }); 

NodeJS सेवाओं

/* the below function is from restifylib/response.js */ 
var restify = require("restify"); 

/* create the restify server */ 
var server = restify.createServer({ 

}); 


server.use(restify.bodyParser()); 
server.use(restify.CORS()); 


server.post('/j/', function(req, res, next) { 

    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 

    // req.params == data on jquery ajax request. 


    res.send(200, JSON.stringify(req.params)); 
    console.log(req.params.blob.ar[2].a) 



    res.end(); 
    return next(); 
}); 


var port = 3000; 
server.listen(port); 
console.log("Server listening on port " + port) 
+0

पर एक विकल्प के रूप में सच है, 'सामग्री टाइप: "एप्लिकेशन/एक्स-www-form-urlencoded "'मेरे लिए भी काम किया है। –

0

इसे स्ट्रिंग न करें। इसे आज़माएं, दो परिवर्तनों को नोट करें, मैंने JSON.stringify को हटा दिया और application/json पर स्विच किया, इसके JSON के रूप में और जावास्क्रिप्ट नहीं।

var request = $.ajax({ 
    url: "http://localhost:8081/j/", 
    async: false, 
    type: "POST", 
    data: jData, 
    contentType: "application/json", 
    dataType: "json" 
}); 

application/javascript केवल JSONP कर जब इस्तेमाल किया जाना चाहिए।

+0

मैंने पहले ही ऐसा कुछ करने की कोशिश की थी। यह काम नहीं करता है। मुझे पोस्ट में कुछ अजीब व्यवहार दिखाई देता है क्योंकि इसे इस तरह से अनुरोध किया जाता है: /विकल्प/जे – Oxnigarth

+0

शायद बहुत देर हो चुकी है, लेकिन यदि आप अभी भी क्रॉसडोमेन का उपयोग करने की कोशिश नहीं करते हैं: अपने AJAX – albertpeiro

0

मेरा उत्तर पहले!

jQuery:

$.ajax({ 
    url: url, 
    method: 'post', 
    data: JSON.stringify({key:value}), 
    contentType: "application/json" 
}); 

नोड http:

server.post('/1', function(req, res) { 
    var body = req.body; 
    var dataValue = body.dataKey; 
}); 

क्यों?

$ .ajax का डेटा केवल सर्वर के अंत में भेजने के लिए है, इसकी डेटाटाइप परिभाषित नहीं की गई है, इसलिए JSON.stringify({key:value}) का उपयोग करते समय, डेटा को '{key: "xxx"}' जैसे स्ट्रिंग के रूप में भेजा जाएगा, और नोड एक स्ट्रिंग प्राप्त करते हैं, एक जेसन ऑब्जेक्ट नहीं, यहां तक ​​कि स्ट्रिंग स्ट्रक्चर एक जेसन की तरह दिखता है। लेकिन जब हम $ .$ .ajax में जोड़ते हैं, जब नोड डेटा प्राप्त करता है, तो यह वास्तविक जेसन ऑब्जेक्ट प्रकार डेटा होगा।

संबंधित मुद्दे