2012-05-04 81 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服務器端。

最後編輯:

服務器端JSON較慢,和客戶端一樣,但它不會成爲瓶頸(100.000呼叫430ms),並加爲朱低於所述重新沒有必要 - 發動輪子。還有一個解決方案:php中的bin2hex()[將430ms的時間縮短爲240],然後用hex2string函數返回javascript中的字符串,但不值得費力。它是JSON。謝謝你們!

+2

你爲什麼不只是以json或xml格式從php發送這些值 – Dhiraj

+0

JSON在這種情況下更有意義。但是,如果你堅持使用CSV類型,那麼使用額外的字段分隔符是非常常見的,比如''',並確保(即替換)它們不出現在值字段中。 – Jules

回答

0
+0

我嘗試了JSON,但是我發現它比通過簡單串接字符串和分割成數組要慢得多:服務器端:慢6倍,客戶端(不重要)慢5-9倍 – MIrrorMirror

+0

這聽起來很難相信。顯然,整個過程將是一個但是6次聽起來像是很多,另外,我不明白這在現實世界中可能是一個問題,如果你有這樣嚴格的性能要求,爲什麼你首先使用PHP:S – Jules

+0

我做了100000個調用的基準測試,json是435ms,簡單地連接了72ms,這是服務器端的6倍 – MIrrorMirror

1

一種選擇是使用JSON對象來代替。

對於PHP(使用json_encode):

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

對於JS(使用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; 
}); 

否則,您可以使用可能不會在田野中找到任何其他分隔符(或者你可以在整個字段中替換它)。其中一個例子是使用換行符號(\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 Side的使用JQuery等你的框架是非常可能有某種inbuild功能看 http://www.javascriptkit.com/dhtmltutors/ajaxgetpost4.shtml 或者如http://api.jquery.com/jQuery.getJSON/

但是,如果你想使用你的### - 分隔符我建議你把它簡化爲「#」,爲了簡單和空間的緣故。之後,介紹所謂的「\」之類的轉義字符。因此,在準備工作中,您將解析輸入並將#與#的所有出現替換爲#,反之亦然。然後,您可以使用一個特殊的正則表達式,其中只有#分裂,而不是通過「#」

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函數替換some_kind_of_escape_function(例如和addslashes或mysql_real_escape_string)它已經有一段時間,因爲我做了PHP的發展,選擇最適合您的需求

然後,它通過逗號分割的簡單的情況下,一個和刪除引號