2

ajaxjQuery のメソッドを呼び出す chrome 拡張機能を作成しました。

content-script.js

[...]
$.ajax({
    "url": "http://localhost:5000/",
    "type": "PUT",
    "contentType": "application/json",
    "data": { "name": "random object" },
    "dataType": "json"
});
[...]

サーバー側では、属性で渡された情報を取得しようとしていdataます:

web.js

[...]
app.put('/', function(request, response) {
    console.log(request.data);
});
[...]

しかし、私はundefined代わりに得ています。サーバー側 ( Node.js + express.jsdata )で取得されるはずの属性で渡されたオブジェクトはどのようになっていますか?

また、そこにたくさんのものを試しconsole.log(request)てみましたが、属性で渡した情報のように見えるものは何もありませんでしたdata...

編集

私の最新の試み(greydslの回答に基づく)は、上記のコードに次の変更をもたらします。

  • app.use(express.bodyParser());の直前に追加app.put...
  • どこまでも変わっputpost
  • request.dataに変更request.body.data

これで、コードは次のようなフォームに応答するときに必要な処理を実行します。

<form method="post" action="/">
    <input name="data" type="text" value="WOO HA" />
    <input type="submit" name="submit" value="submit" />
</form>

postただし、代わりに使用に戻すと、まだ失敗します(何らかの理由putでブラウザが終了します)http://localhost:5000/?data=WOO+HA&submit=submit

また、ajax でputting (またはposting) を実行すると失敗します (上記のコードを参照)。ajaxで試してみると、サーバーで次のようになります。

SyntaxError: Unexpected token ILLEGAL
    at Object.parse (native)
    at IncomingMessage.<anonymous> (/home/shawn/.node_libraries/.npm/connect/1.8.7/package/lib/middleware/bodyParser.js:135:16)
    at IncomingMessage.emit (events.js:61:17)
    at HTTPParser.onMessageComplete (http.js:133:23)
    at Socket.ondata (http.js:1019:22)
    at Socket._onReadable (net.js:683:27)
    at IOWatcher.onReadable [as callback] (net.js:177:10)
4

3 に答える 3

6
  1. 他の人が言及しているように、そしてあなたが今やっているように、 bodyParser ミドルウェアを使用する必要があります。

  2. リクエスト本文のコンテンツ タイプが「application/json」の場合、bodyParserはそれを解析してオブジェクトに変換し、request.body. したがって、あなたの場合request.body.nameは「ランダムオブジェクト」でなければなりません。

あなた (および以前の応答者の何人か) は、jQuery のajaxメソッドが要求本文で送信される (JSON としてシリアル化された) オブジェクトのキー名「データ」を使用し、魔法のように仮定にスライドするという事実に精神的にハングアップしていると思います。サーバー側でリクエストを処理するものはすべて、そのオブジェクトを「データ」という名前で呼び出します。両者の間には何の関係もありません。

于 2012-05-21T08:13:01.817 に答える
3

を使用する必要がありますreq.body.data。このようなものが動作するはずです:

app.post('/', function(req, res) {
  console.log(req.body.data);
  res.redirect('/');
});

このリンクを見てください: bodyParser

お役に立てれば幸いです。:)

編集: $.ajax を操作するための素敵なライブラリが見つかりました。それは superagent と呼ばれます。試してみることを検討してください。有望に見えます。:)

アップデート

問題は、node.js コードではなく jquery コードにあります。dataオブジェクトのプロパティでオブジェクトを送信することはできません。最初にデータ オブジェクトsettings文字列化する必要があります。json2.jsすばらしいD から - ouglas Crockford まで: json2.jsを使用できます。

そのライブラリを含めた後、次のコードで目的の結果が得られるはずです。

$().ready(function() {

    var data = {
        data: "My name is",
        name: "Slim Shady"
    };

    stringifiedData = JSON.stringify(data);

    $.ajax({
        "url": "http://127.0.0.1:3000/",
        "type": "PUT",
        "contentType": "application/json",
        "data": stringifiedData,
        "dataType": "json"
    });
});

そして app.js で:

app.put('/', function(req, res) {
    console.log(req.body.data + "... " + req.body.name);
    res.redirect('/');
});
于 2012-05-13T20:47:59.070 に答える
0

jquery データ属性は、サーバーに送信される前に、クエリ文字列または投稿データに変換されます。それを取得するには、node.js を使用して GET および POST パラメーターをデコードします。

あなたはexpress.jsを使用すると言いました。dataExpress.js で次のように渡す{ EmployeeName : "George" }と、express.js にrequest.params.EmployeeName「George」が含まれます。

于 2012-05-13T19:01:49.670 に答える