0

jquery/JS および PHP を使用した単純なクライアント/サーバー通信に取り組んでいます。a がデータに含まれるまで問題なく動作'.'します。

次のタイトルで試しました:

  • asdf-wq1 --> works
  • test1 --> works
  • bigip1.local --> '.' is replaced with '_'

既にescape()コードに関数を追加しましたが、結果は同じでした。

function xy(){
    for (var i = 0; i < nodes.length; i++) {
        var xy = escape(nodes[i].title) +"=" +escape(nodes[i].translate.x + "/" + nodes[i].translate.y);

        $.ajax({
            url: 'save_layout.php',
            data: xy,
            dataType: "text",
            type: 'post',
            success: function(output) {
                $("#output").html(output);
            },
            error: function (response, status, error) {
                alert("error" + response.responseText);
            }
        });
    }
}

PHP:

foreach($_POST as $name=>$value) {
     echo "$name $value \n";
}   

Firebug 出力要求:

POST http /frontend/save_layout.php

200 OK 186ms   
jquery....min.js (Zeile 4)
HeaderPostAntwortHTML
パラメータapplication/x-www-form-urlencoded
bigip1.local 470/390

ケレ
bigip1.local=470/390

Firebug 出力 (応答):

bigip1_local 470/390

ご覧のとおり、サーバーに正しく送信されているように見えますが、サーバー上で私たちのを読むとすぐに$_POST- が'.'突然'_'発生します。

誰かがここで私を助けてくれることを願っています!

4

3 に答える 3

3

dataを手動で文字列に変換しないでください。jQuery はそれを行います。文字列の代わりにオブジェクトを Ajax 関数に渡すだけです。

そして、絶対に (絶対に! ) 使用しないでくださいescape()。この機能は壊れており、使用する理由はありません。encodeURIComponent()何らかの理由で手動で URL エンコーディングを行う必要がある場合は、代わりに使用してください。

function xy(nodes) {
    $.each(nodes, function (i, node) {
        $.post("save_layout.php", {
            title: node.title,
            x: node.translate.x,
            y: node.translate.y
        })
        .done(function (output) {
            $("#output").html(output);
        })
        .fail(function (response, status, error) {
            alert("error" + response.responseText);
        });
    });
}

また、jQuery のコンテキストでより慣用的になるように、コードに加えた他のいくつかの変更にも注意してください。

  • nodesがグローバル変数ではなくパラメーターとして渡されるという事実。これにより、関数の独立性が高まります。
  • を使用$.each()して for ループを置き換えます。
  • $.post()より一般的な の代わりに明示的なの使用$.ajax()
  • すべてのデータがキーとしてではなくとして渡されるという事実。キーtitlexyはすべてのリクエストで同じです。これにより、サーバー側 (およびクライアント側) での作業が容易になります。
  • .done()およびに.fail()アタッチできるコールバックの使用。それらの性質はpromiseの性質であるためです。と promisesの詳細を読むか、これをそのまま受け入れることができます。これは、jQuery で Ajax コールバックを操作する非常に便利な方法です。.post().get().ajax()$.Deferred

オブジェクトごとに 1 つの要求を行うのではなく、すべてのオブジェクトに対して1 つのAjax 要求を行うようにコードをリファクタリングすることを検討してください。HTTP リクエストには時間がかかるため、それらを組み合わせるのが最善です。

于 2013-01-06T14:44:10.233 に答える
0
  1. エスケープは非推奨です。encodeURIComponent を使用することをお勧めします。
  2. あなたの場合はjQuery機能を使用するだけです

    for (var i = 0, l = nodes.length; i < l; i++) {
    
        var data = {};
        data[nodes[i].title] = nodes[i].translate.x + "/" + nodes[i].translate.y;
    
        $.ajax({
            url: 'save_layout.php',
            data: data,
            dataType: "text",
            type: 'post',
            success: function(output) {
                $("#output").html(output);
            },
            error: function (response, status, error) {
                alert("error" + response.responseText);
            }
        });
    
    }
    
于 2013-01-06T14:28:33.320 に答える
-1

あなたのJavaScriptコードでは、使用してみることができます

JSON.stringify(values);

そして、あなたのphpでjson_decode()だけです。

于 2013-01-06T14:26:34.537 に答える