2011-07-18 7 views
1

私はJSONPを使用して(別のポート上の)クライアント側の呼び出しを介してサーバーからJSONオブジェクトを取得しようとしています。しかし、私のサーバーはNode.jsとExpressを使ってjavascriptで実装されているため、JSONPでJavascriptを使ってサーバー上でほとんど見つけられませんでした。サーバー側の言語でJavaScriptを使用したJSONP呼び出し

私は、コールバックに関して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); 
}); 

しかし、私はエラーを取得:8888:クライアントは、ローカルホスト上のMAMPを介して実行されている間

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

サーバーがポート1337です。私は数日間この設定を実行しようとしていたので、ローカルホストに関連する問題でさえもわからない。

私の問題は、PHPで書かれているこの行を私のサーバー側のJavascriptに書き込まないことと関係していると思います。私が見つけたJSONPの例のほとんどは、このようなものでした。確信はないけど。

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

ご協力いただければ幸いです。私は超冗長であることを前に謝ります。

カテゴリーで探す、 コング

答えて

1

私はあなたが二つの問題があると思います。クライアント側のjQueryコードを動作させることとはまったく別に、通常のブラウザ要求(つまり、そのURLに貼り付ける)を行い、期待どおりの結果を得ることができるようにする必要があります。私はExpressを使用していないので、なぜあなたがそれを得るのかについて私がコメントするのは難しいですが、あなたのサーバーサイドコードのどこにでも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が表示されますが、通知と一緒に:リソースはDocumentとして解釈されますが、MIMEタイプapplication/jsonで転送されます。 。私はあなたが提案したものを試しましたが、私は同じ問題を抱えています。醜いフォーマットには申し訳ありません。 –

0

http://api.jquery.com/jQuery.getJSON/から、2 '' ' URLに

あなただけのものを持っているので、適切JSONPフォーマットさresponceを返すため@jimbojwの提案を見て

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

を試してみて、それはあなたの404 を取り除くかどうかを確認します。

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

最新のバージョンで使用res.jsonp( "hello"); callback = myfuncかnoを指定して、jsonかjsonpを追加します。 –

関連する問題