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 毫秒),而且正如 Jules 所说,不需要重新发明轮子。还有一个解决方案:php 中的 bin2hex() [将时间从 430ms 减少到 240],然后使用 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.'"';

当然,用适当的 php 函数(例如,addlashes 或 mysql_real_escape_string)替换 some_kind_of_escape_function 自从我完成 PHP 开发以来已经有一段时间了,所以选择最适合您需要的那个

然后是一个用逗号分割并去掉引号的简单案例

于 2012-05-04T09:15:34.340 回答
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;
});

否则,您可以使用在字段中可能找不到的任何其他分隔符(或者您可以在整个字段中替换它)。示例之一是使用换行符 ( \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/

但是,如果你想使用你的###-Delimiter,我建议你将它减少到只是“#”,为了简单和空间。之后引入所谓的转义字符,例如“\”,因此在预通行证中,您将解析输入并将所有出现的 # 替换为 #,在输出中反之亦然。然后,您可以使用特殊的正则表达式拆分您的字符串,该正则表达式仅按 # 拆分,而不是按“#”拆分

于 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 回答