how to use jQuery ajax calls with node.js how to use jQuery ajax calls with node.js ajax ajax

how to use jQuery ajax calls with node.js


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.


Thanks to yojimbo for his answer. To add to his sample, I wanted to use the jquery method $.getJSON which puts a random callback in the query string so I also wanted to parse that out in the Node.js. I also wanted to pass an object back and use the stringify function.

This is my Client Side code.

$.getJSON("http://localhost:8124/dummy?action=dostuff&callback=?",function(data){  alert(data);},function(jqXHR, textStatus, errorThrown) {    alert('error ' + textStatus + " " + errorThrown);});

This is my Server side Node.js

var http = require('http');var querystring = require('querystring');var url = require('url');http.createServer(function (req, res) {    //grab the callback from the query string       var pquery = querystring.parse(url.parse(req.url).query);       var callback = (pquery.callback ? pquery.callback : '');    //we probably want to send an object back in response to the request    var returnObject = {message: "Hello World!"};    var returnObjectString = JSON.stringify(returnObject);    //push back the response including the callback shenanigans    res.writeHead(200, {'Content-Type': 'text/plain'});    res.end(callback + '(\'' + returnObjectString + '\')');}).listen(8124);


I suppose your html page is hosted on a different port. Same origin policy requires in most browsers that the loaded file be on the same port than the loading file.