2011-07-18 24 views
1

我一直在尝试使用JSONP通过客户端调用(在不同的端口)从服务器获取JSON对象。但是,因为我的服务器是使用Node.js和Express在JavaScript中实现的,所以我一直无法在服务器上使用Javascript来查找JSONP上的大部分网站,因为我发现大多数网站使用php代替服务器端代码。JSONP调用与服务器端语言为Javascript

我相信这个问题是关于如何设置URL的回调,这是我有点模糊,因为它对我来说是新的。

在服务器上:

//Setting up server stuff 
var express = require('express'), 
    app = express.createServer(); 
    app.use(express.logger()); 

//Making a connection to the mongoDB to get the data that I want to display in the JSON object 
new Db('prism', 
    new Server("127.0.0.1", 27017, {auto_reconnect: false}), {}).open(function(err, db) { 
    app.get('/getData', function(req, res) { 
     console.log('JSONPCALLBACK CALLED WITH RETURNDATA PASSED IN; SERVER SIDE'); 
     if (typeof callback == 'function') { 
     console.log('callback is defined'); 
     callback(returnData); 
     } 
     else { 
     console.log('callback is not defined'); 
     } 
    } 
}); 

和客户端上:

$.ajaxSetup({ cache : false }); 
$.getJSON('http://127.0.0.1:1337/getData&callback=?', function(rtndata) { 
    console.log('SUCCESS'); 
    console.log(rtndata); 
}); 

嵌入由标准的标签。

但我得到的错误:

GET http://127.0.0.1:1337/getData&callback=jQuery16108897686484269798_1311007334273?_=1311007334342 404 (Not Found) 

的服务器是在端口1337,而客户端通过甲基苯丙胺在本地主机上运行:8888。我不确定它是否与本地主机相关的问题,因为我一直试图让这个设置运行几天。

我相信这个问题与不将这行代码写入我的服务器端JavaScript中,这是在PHP中。我发现的大部分JSONP例子都是这样的。但我不确定。

if ($GET['callback'] != '') 
    $json = $GET['callback']."($json)"; 
    return $json; 

任何帮助将不胜感激。我为超级冗长而道歉。

最好成绩, 聪

回答

1

我认为你有两个问题。首先是404。完全分开获取客户端jQuery代码的工作,您需要确保您可以发出常规的浏览器请求(即粘贴该URL)并获得您期望的结果。我没有使用过快递,所以我很难评论你为什么要这样做,除非说你在服务器端代码的任何地方都看不到1337,只是看起来是端口号27017

第二个问题是,你实际上并不想执行服务器上的回调,只是建立JSON响应,包括前缀回调(字符串)。

所以不是这个......

if (typeof callback == 'function') { 
    console.log('callback is defined'); 
    callback(returnData); 
    } 
    else { 
    console.log('callback is not defined'); 
    } 

试试这个:

if (callback) { 
    console.log('callback is defined'); 
    res.write(callback + '(' + JSON.stringify(returnData) + ')'); 
    } 
    else { 
    console.log('callback is not defined'); 
    } 

希望这有助于!

+0

对不起,但我将端口设置为1337;我只放入了代码片段。我有行:app.listen(1337);.端口27017用于连接mongoDB以获取数据。我不确定它是如何工作的,因为我有一个单独的终端作为mongoDB的服务器运行。从404开始,当我访问url:http://127.0.0.1:1337/getData/时,它确实显示了JSON obj,但是还显示了通知:Resource解释为Document,但是使用MIME类型application/json传输。我尝试了你的建议,但我得到了同样的问题。对不起,丑陋的格式。 –

0

http://api.jquery.com/jQuery.getJSON/有一个例子,包括2'?'在URL中。

你只有一个,所以尽量

$.getJSON('http://127.0.0.1:1337/getData?callback=?', function(rtndata) { 

,看看有没有被用于返回一个适当的JSONP格式化性反应摆脱你的404 再看看@jimbojw建议。

0

使用此:

var express = require("express"); 
var server = express.createServer(); 
server.enable("jsonp callback"); 
server.get("/foo", function(req, res) { 
    // this is important - you must use Response.json() 
    res.json("hello"); 
}); 

jsonp with node.js express

+0

在最新的exp版本中使用res.jsonp(“hello”);它会给你json或jsonp的基础上你已经附加?callback = myfunc或没有。 –