2012-05-04 18 views
2

だからPHPファイルには、このような(AJAX呼び出しに)文字列を返します。文字列区切り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を試しましたが、それはWAY SLOWERサーバー側です。

FINAL EDIT:

サーバー側のJSONはジュールを再するには、以下の言ったようにしかし、(100.000コール用430ms)とボトルネックになることはないだろうプラス必要がないため、クライアント側で同じ遅く、 - 車輪をなくす。もう1つの解決策がありました.phpのbin2hex()は、[時間を430msから240に短縮しました]その後、javascriptの文字列をhex2string関数で取り戻しますが、努力する価値はありません。 JSONです皆さん、ありがとうございました!

+2

最高

ニーズに合ったものが、それはカンマで分割の単純なケースだ選択し、引用符を削除するPHPの開発を行ってきたので、それがしばらくされていますこれらの値をPHPのjsonまたはxml形式で送信してください – Dhiraj

+0

JSONはそのような状況ではもっと意味があります。しかし、あなたがCSV型を主張している場合は、 '' 'のような追加のフィールドデリミタを使用して値のフィールドに表示されないことを確認します(つまり置き換えます)。 – Jules

答えて

0
+0

JSONを試しました。サーバー側:6倍遅く、クライアント側(それほど重要ではない)5-9倍遅く – MIrrorMirror

+0

それは信じがたいようです。明らかに、プロセス全体は少し遅いですが、6回は多くのように聞こえますが、現実世界でこれがどのように問題になるかはわかりませんが、パフォーマンス要件が厳しい場合は、まずPHPをなぜ使用していますか:S – Jules

+0

私は100,000回の呼び出しでベンチマークを行いましたjsonは435msで、単純に連結すると72msでしたが、これはサーバー側の6倍です – MIrrorMirror

1

一つの選択肢ではなく、JSONオブジェクトを使用することです。 (json_encodeを使用して)PHPについては

:JSについては

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

jQuery methodを使用して):

$.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)を使用することです。

+0

ご返信ありがとうございますが、JSONはサーバー側とクライアントの両方で非常に遅いです。サーバー側では6倍遅く、それは重要だと思います。 – MIrrorMirror

+0

@ user1032650 '\ n'をデリミタとして使うのはどうですか? – VisioN

+0

これは良い解決策になりますが、私が使用する区切り文字が何であれ、javascriptによる悪意のあるユーザーもそれを挿入することができるのではないかと心配しています。 – MIrrorMirror

1

独自のフォーマットがある場合は、そのフォーマットを開発するのはなぜですか? 使用JSON:

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

そしてJavsascriptサイドは、あなたのフレームワークは、あなたがしたいしかし場合は、そのようなhttp://api.jquery.com/jQuery.getJSON/

としてinbuild機能のいくつかの種類がありますがはるかに可能性がある http://www.javascriptkit.com/dhtmltutors/ajaxgetpost4.shtml やあなたはjQueryのを使用している場合などを参照してください。あなたの###を使用する - デリミタ私は単純さとスペースのために、それを "#"に減らすことを提案します。その後、 "\"のようなエスケープ文字の導入プリパスでは入力を解析し、#のすべてを#で置き換えます。逆もまた同様です。その後、唯一の#で分割しない「#」によって

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の)私はなぜあなただ​​けいけない

関連する問題