2012-10-29 66 views
0

我正在製作跨域AJAX請求,因此,我無法將原始數組從PHP頁面傳遞到我的HTML頁面。相反,請求會以字符串的形式獲得結果。我有它設置,使語法看起來像這樣:拆分以獲取分隔符之間的文本?

([SCHOOL] Name [/SCHOOL][STATUS] Status [/STATUS]) 
([SCHOOL] Other name [/SCHOOL][STATUS] Other status [/STATUS]) 

在我的HTML網頁,我希望能夠形成從這些不同的值的數組,在形式:

Array (
    [0] => 
     [0] Name 
     [1] Other 
    [1] => 
     [0] Name 
     [1] Other status 
) 

這樣,我可以使用for循環來獲取特定值。

唯一的問題是split只能做到這一點,分裂的東西。有沒有在JS中找到分隔符內的文本,並從中形成一個數組的方法?再次在示例中,它會找到括號內的所有文本,然後形成第一個數組,然後在該數組內,使用[SCHOOL][/SCHOOL]之間的文本作爲第一個對象,並使用[STATUS][/STATUS]之間的文本作爲第二個對象。

+0

爲什麼不把它按住w/XML或JSON? –

+0

嗯,我使用'.getJSON',但它只返回它作爲一個字符串。我不確定它如何處理跨域請求。 – Charlie

+0

我的意思是從你的php。它應該返回一個不同的格式。 –

回答

1

理想情況下,您可以使用更適合在服務器端存儲數組的東西。我會推薦JSON。這對於使用php進行編碼並不重要,並且使用javascript進行解碼。

如果你沒有這個選項服務器端,那麼你可以使用正則表達式來解析你的文本。但是,您必須確保內容中沒有您的分隔符。

你如何從源獲取目標數據結構,但我希望這樣的事情可能會爲你工作,這是不明確的:

str = "([SCHOOL] Name [/SCHOOL][STATUS] Status [/STATUS])\n\ 
([SCHOOL] Other name [/SCHOOL][STATUS] Other status [/STATUS])" 

arr =[] 
m = str.match(/\(.+?\)/g) 
for(i in m){ 
    matches = m[i].match(/\(\[SCHOOL\](.+?)\[\/SCHOOL\]\[STATUS\](.+?)\[\/STATUS\]\)/) 
    arr.push([matches[1],matches[2]]) 
} 

console.dir(arr) 
+0

我們假設我在PHP中使用JSON進行編碼。我如何在JS中解碼它? – Charlie

+0

您使用'JSON.Parse'。或者你使用jQuery的'.getJSON()'方法,它自動爲你做。他們將返回一個結構與您在PHP頁面上編碼的數據相匹配的對象。 – Barmar

+0

真的很容易:'my_parsed_object = JSON.parse(the_json_string)' –