2012-12-19 17 views
2

我想通过GET ajax调用将一些十六进制颜色传递给php脚本。虽然PHP似乎不喜欢十六进制颜色,但我尝试更换#并使用encodeURIComponent这两者都不起作用。在GET ajax调用中传递HEX颜色

这里是你能做到这一点的JS(每个currentColors项是一个十六进制颜色)

var dataString = 'designName=test&mc1='+currentColors[1]+'&mc0='+currentColors[0]+'&sp='+currentColors[2]; 
var strippedString = encodeURIComponent(dataString); 
+1

为什么不去掉来自颜色的#号? –

+0

为什么不只是省略#?你并不需要它。 – kennypu

+0

你有什么错误?为什么不在没有'#'的情况下发送颜色值并在服务器端将其添加回(如果需要)? –

回答

4

使用encodeURIComponent编码URI 部件

var strippedString = 
    "designName=test" + 
    "&mc1=" + encodeURIComponent(currentColors[1]) + 
    "&mc0=" + encodeURIComponent(currentColors[0]) + 
    "&sp=" + encodeURIComponent(currentColors[2]); 

实施例:

var strippedString = 
    "designName=test" + 
    "&mc1=" + encodeURIComponent("#FF0000") + 
    "&mc0=" + encodeURIComponent("#00FF00") + 
    "&sp=" + encodeURIComponent("#0000FF"); 
// "designName=test&mc1=%23FF0000&mc0=%2300FF00&sp=%230000FF" 

在服务器端的查询字符串将产生:

// parse_str("designName=test&mc1=%23FF0000&mc0=%2300FF00&sp=%230000FF", $my_GET); 
// var_dump($my_GET); 

array(4) { 
    ["designName"]=> 
    string(4) "test" 
    ["mc1"]=> 
    string(7) "#FF0000" 
    ["mc0"]=> 
    string(7) "#00FF00" 
    ["sp"]=> 
    string(7) "#0000FF" 
} 
+0

干杯,干净利落。 –

0

var strippedString = dataString.split('#').join(''); 

然后,服务器端,前置'#'的参数一次。


.split('#')将字符串分割成一个阵列,在'#'字符:

var s = 'designName=test&mc1=#FF0000&mc0=#FFFFFF&sp=#FF00FF'; 
var a = s.split('#'); 
console.log(a); 
//["designName=test&mc1=", "FF0000&mc0=", "FFFFFF&sp=", "FF00FF"] 

.join('')然后再一起加入本阵:

var s = a.join(''); 
console.log(s); 
//'designName=test&mc1=FF0000&mc0=FFFFFF&sp=FF00FF' 

你也可以使用一个占位符/替换字符串中的.join('')

var s = a.join('%'); 
console.log(s); 
//'designName=test&mc1=%FF0000&mc0=%FFFFFF&sp=%FF00FF' 

或者,像Salman Aanswered,使用仅在组件encodeURIComponent。 (这是毫无疑问的速度比阵列的功能,如我建议)