2015-05-11 1 views
0

У меня есть следующие строки запроса, который создается с помощью моего DataTable:jquery dataTables plug in - как получить значения querystring на стороне сервера?

http://testserver/cgi-bin/widget?draw=1&columns%5B0%5D%5Bdata%5D=0&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=true&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=1&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=2&columns%5B2%5D%5Bname%5D=&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=true&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B3%5D%5Bdata%5D=3&columns%5B3%5D%5Bname%5D=&columns%5B3%5D%5Bsearchable%5D=true&columns%5B3%5D%5Borderable%5D=true&columns%5B3%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B3%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=1&order%5B0%5D%5Bdir%5D=asc&start=0&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1431373301322 

С моей CGI скрипт, я могу извлечь значения, как «рисовать» и «старт», делая что-то вроде

local start = FORM.start 
local draw = FORM.draw 

Но мне нужно знать, как получить другие ценности. В инструменте F12 в FFox я вижу, что у меня есть значения, такие как столбцы [1] [data]: 1, но я не могу получить правильный синтаксис, чтобы получить эти значения. В строке запроса я показал вам выше, это значение передается/размещены как "колонки% 5B1% 5D% 5Bdata% 5D = 1"

Я попытался следующие комбинации:

--log(FORM.columns.1.data) 
--log(FORM.columns[1][data]) 
--log(FORM.columns[1]['data']) 
--log(FORM.columns['1']['data']) 

Я также запустить несколько тестов в командной строке Lua, чтобы убедиться, что я знаю, как получить доступ к значениям, хранящимся в многомерных массивах

Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio 
> mt = {} 
> mt[1]={} 
> mt[1]['data']=1 
> print(mt[1].data) 
1 
> print(mt[1]['data']) 
1 
> 

Любые предложения будут оценены. Спасибо.

ответ

0

Эта строка имеет значение percent encoded, так как квесты не могут быть, например. скобки в них. Вы должны декодировать его перед его использованием. Here - пример того, как это сделать (в конце страницы). Эти два метода:

function unescape (s) 
    s = string.gsub(s, "+", " ") 
    s = string.gsub(s, "%%(%x%x)", function (h) 
     return string.char(tonumber(h, 16)) 
     end) 
    return s 
end 

который используется

cgi = {} 
function decode (s) 
    for name, value in string.gfind(s, "([^&=]+)=([^&=]+)") do 
    name = unescape(name) 
    value = unescape(value) 
    cgi[name] = value 
    end 
end