Tuesday, June 4, 2024
 Popular · Latest · Hot · Upcoming
93
rated 0 times [  94] [ 1]  / answers: 1 / hits: 15561  / 10 Years ago, thu, june 19, 2014, 12:00:00

I have created a minimalist API on nodejs which return data in JSON format.



But every time I try to make a ajax#get call and pass my API as URL, I will get an error and judging from Chrome, I'm getting a Unexpected token : error;



here the server code in nodejs + express:



var
http = require( 'http' ),
express = require( 'express' ),
app = express(),
server = http.createServer( app );

app.get( '/', function( req, res ) {
console.log( 'req received' );
res.setHeader('Content-Type', 'application/json');
res.end( JSON.stringify({
Name : Tom,
Description : Hello it's me!
}) );

});

server.listen(3000, function() {
console.log( 'Listening on 3000' );
});


The JSON returned from / is: {Name:Tom,Description:Hello it's me!}.



Here is my call from the client js:



$.ajax({
url: findUrl,
type: 'get',
dataType: 'jsonp',
success: function ( data ) {
self.name( data.Name );
self.description( data.Description );
},
error: function( jqXHR, textStatus, errorThrown ) {
alert(errorThrown);
}
});


When plotting the error I get: jQuery111108398571682628244_1403193212453 was not called



Can someone help me?



I know this question has been asked already but I haven't manage to find a solution which fix my program.


More From » jquery

 Answers
25

To support JSONP requests, the server will have to include the P, or Padding, in the response.



jQuery111108398571682628244_1403193212453({Name:Tom,Description:Hello it's me!})


The syntax error, Unexpected token :, is because JSONP is parsed as JavaScript, where {...} also represents blocks. It just takes advantage of JSON and JavaScript's similar syntax to define the data being passed to a global function call.



By default, jQuery will include a callback query-string parameter with the name of the function:



var callback = req.query.callback;
var data = JSON.stringify({
Name : Tom,
Description : Hello it's me!
});

if (callback) {
res.setHeader('Content-Type', 'text/javascript');
res.end(callback + '(' + data + ')');
} else {
res.setHeader('Content-Type', 'application/json');
res.end(data);
}


ExpressJS also includes res.jsonp() that already implements this condition:



app.get( '/', function( req, res ) {
console.log( 'req received' );

res.jsonp({
Name : Tom,
Description : Hello it's me!
});
});

[#70505] Tuesday, June 17, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
kalias

Total Points: 79
Total Questions: 116
Total Answers: 116

Location: Malaysia
Member since Wed, May 11, 2022
2 Years ago
;