JSONP以服务器端语言作为Javascript调用

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

我相信这个问题是关于如何在callback方面设置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); }); 

由标准标签embedded。

但是我得到的错误:

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

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

我相信这个问题与不把这个在PHP中的这一行写入到我的服务器端JavaScript中有关系。 我发现的大部分JSONP例子都是这样的。 但我不确定。

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

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

最好,聪

我认为你有两个问题。 首先是404.完全分开获取客户端jQuery代码的工作,你需要确保你可以发出一个常规的浏览器请求(即粘贴该URL),并得到你所期望的。 我没有使用明确的,所以我很难评论你为什么会得到这个,除了说,我没有看到你的服务器端代码中的任何地方1337,只是似乎是端口号27017 。

第二个问题是,你实际上并不想在服务器上执行callback,只需构build包含前缀callback(string)的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'); } 

希望这可以帮助!

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

你只有一个,所以试试

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

看看是否摆脱你的404然后看@ jimbojwbuild议返回一个正确的jsonp格式的响应。

用这个:

 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与node.jsexpression