Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to use jQuery ajax calls with node.js

This is similar to Stream data with Node.js, but I don't feel that question was answered sufficiently.

I'm trying to use a jQuery ajax call (get, load, getJSON) to transfer data between a page and a node.js server. I can hit the address from my browser and see 'Hello World!", but when I try this from my page, it fails and shows that I get no response back. I setup a simple test page and hello world example to test this:

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="utf-8" />     <title>get test</title>  </head> <body>     <h1>Get Test</h1>     <div id="test"></div>      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>     <script>         $(document).ready(function() {             //alert($('h1').length);             $('#test').load('http://192.168.1.103:8124/');             //$.get('http://192.168.1.103:8124/', function(data) {                             //  alert(data);             //});         });     </script> </body> </html> 

and

var http = require('http');  http.createServer(function (req, res) {     console.log('request received');     res.writeHead(200, {'Content-Type': 'text/plain'});     res.end('Hello World\n'); }).listen(8124); 
like image 889
briznad Avatar asked Mar 21 '11 04:03

briznad


People also ask

Can I use AJAX with NodeJs?

This can be done by Ajax request, we are sending data to our node server, and it also gives back data in response to our Ajax request. Step 1: Initialize the node modules and create the package. json file using the following command.

Can I use jQuery in node js?

js: We can use jQuery in Node. js using the jquery module. Note: Use the 'jquery' module not the 'jQuery' module as the latter is deprecated.

Can jQuery and AJAX be used together?

jQuery provides several methods for AJAX functionality. With the jQuery AJAX methods, you can request text, HTML, XML, or JSON from a remote server using both HTTP Get and HTTP Post - And you can load the external data directly into the selected HTML elements of your web page!


1 Answers

If your simple test page is located on other protocol/domain/port than your hello world node.js example you are doing cross-domain requests and violating same origin policy therefore your jQuery ajax calls (get and load) are failing silently. To get this working cross-domain you should use JSONP based format. For example node.js code:

var http = require('http');  http.createServer(function (req, res) {     console.log('request received');     res.writeHead(200, {'Content-Type': 'text/plain'});     res.end('_testcb(\'{"message": "Hello world!"}\')'); }).listen(8124); 

and client side JavaScript/jQuery:

$(document).ready(function() {     $.ajax({         url: 'http://192.168.1.103:8124/',         dataType: "jsonp",         jsonpCallback: "_testcb",         cache: false,         timeout: 5000,         success: function(data) {             $("#test").append(data);         },         error: function(jqXHR, textStatus, errorThrown) {             alert('error ' + textStatus + " " + errorThrown);         }     }); }); 

There are also other ways how to get this working, for example by setting up reverse proxy or build your web application entirely with framework like express.

like image 79
yojimbo87 Avatar answered Oct 02 '22 06:10

yojimbo87