2

したがって、PHPファイルは次のような文字列を(ajax呼び出しに)返します。

$output = $sessID."###".$sessEmail."###".$sessFirstName."###".$sessLanguage."###".$sessRememberMe;

そしてjavascriptで私はします:

    if (reply.indexOf("###") >= 0) {
    arrayReply = reply.split("###");
    user.ID = arrayReply[0];
    user.Email = arrayReply[1];
    user.FirstName = arrayReply[2];
    user.Language = arrayReply[3];
    user.RememberMe = arrayReply[4];
    }

応答の一部に「###」を使用する区切り文字が含まれていると、問題が発生する可能性があります。そのような状況で私は何ができますか?私の意見では、区切り文字をより複雑/まれにすることは解決策ではありません。

PS:JSONを試しましたが、サーバー側の方がはるかに遅いです。

最終編集:

サーバー側のJSONは低速で、クライアント側でも同じですが、ボトルネックになることはなく(100.000回の呼び出しで430ミリ秒)、さらにジュールが車輪の再発明を行う必要はありません。もう1つの解決策がありました。phpのbin2hex()[430msから240msに時間を短縮しました]そして、hex2string関数を使用してjavascriptで文字列を取得しますが、努力する価値はありません。JSONです。皆さん、ありがとうございました!

4

4 に答える 4

2

あなたが言うように、JSONとしてのエンコードがあなたが以下を試すことができるより遅いなら、

$output = '"' . some_kind_of_escape_function($sessID).'","'.some_kind_of_escape_function($sessEmail).'","'.some_kind_of_escape_function($sessFirstName).'","'.some_kind_of_escape_function($sessLanguage).'","'.$sessRememberMe.'"';

そしてもちろん、some_kind_of_escape_functionを適切なphp関数(addslashesやmysql_real_escape_stringなど)に置き換えます。PHP開発を行ってからしばらく経ちましたので、ニーズに最適なものを選択してください。

次に、コンマで分割して引用符を削除するという単純なケースです。

于 2012-05-04T09:15:34.340 に答える
1

1つのオプションは、代わりにJSONオブジェクトを使用することです。

PHPの場合(json_encodeを使用):

$output = json_encode(array(
    "sessid" => $sessID,
    "sessEmail" => $sessEmail,
    "sessFirstName" => $sessFirstName,
    "sessLanguage" => $sessLanguage,
    "sessRememberMe" => $sessRememberMe
));

JSの場合(jQueryメソッドを使用):

$.getJSON("/path/to/script.php", function(reply) {
    user.ID = reply.sessid;
    user.Email = reply.sessEmail;
    user.FirstName = reply.sessFirstName;
    user.Language = reply.sessLanguage;
    user.RememberMe = reply.sessRememberMe;
});

それ以外の場合は、フィールドで見つからない可能性のある他の区切り文字を使用できます(または、フィールド全体で置き換えることができます)。例の1つは、改行の記号(\n)を使用することです。

于 2012-05-04T09:08:37.817 に答える
1

すでにフォーマットがあるのに、なぜ独自のフォーマットを開発するのですか?Jsonを使用する:

$output = json_encode(array('sessionID'=>$sessID,'sessionEmail'=>sessEmail,'sessionFirstName'=>$sessFirstName,'sessLanguage'=>$sessLanguage,'sessRememberMe'=>$sessRememberMe));

また、Javsascript側については 、 http ://www.javascriptkit.com/dhtmltutors/ajaxgetpost4.shtmlを参照してください。または、JQueryなどを使用している場合は、フレームワークにhttp://api.jquery などの何らかの組み込み機能がある可能性があります。 com / jQuery.getJSON /

ただし、###-区切り文字を使用する場合は、単純さとスペースを確保するために、「#」だけに減らすことをお勧めします。その後、「\」などのいわゆるエスケープ文字を導入します。したがって、プリパスでは、入力を解析し、出力で#のすべての出現箇所を#に置き換えます。その逆も同様です。次に、特別な正規表現を使用して文字列を分割できます。この正規表現は、「#」ではなく#でのみ分割されます。

于 2012-05-04T09:08:58.850 に答える
0

jsonを使用できます。

http://php.net/manual/en/function.json-encode.php

JavaScriptで配列要素をJSONデコードする方法は?

于 2012-05-04T09:06:08.020 に答える