尝试了一些AJAX,我发现我的大部分数据都充斥着下划线! 文档证实这是按预期工作的。有什么方法可以将我的表单信息传递给PHP吗?我正在使用CodeIgniter,所以我的传递看起来像/ controller / function / variable, 接收控制器:
controller{
function($v=0){#what once was hello world is now hello_world...}
}
我不能很好地撤消,数据可能包含下划线。
谢谢, 布兰登
编辑:
我认为它正在转换价值。以下是代码的要点:
<form>
<text input name="tbox"/>
<submit/>
</form>
ajax_handler(
v = form.name() + form.val()
do_ajax('/controller/function/v')
)
controller(){
function($v=0){#spaces and periods in v are converted to underscore}
}
再次感谢,
布兰登
这是实际代码:
<input type="text" id="tusername" name="tusername" class="checkable tbox"/>
<button id="unsubmit" name="wizard" class="formable">next</button>
$('.formable').live('click',function(event){
event.preventDefault();
var n = $(this).attr('id');
var a = $(this).attr('name');
var v = dosend();
$.ajax({
url: '/form/'+n+'/'+v,
type: 'post',
success: function(result){
alert(result);
}
});
function dosend(){
var inputs = $(":input");
var s = "";
inputs.each(function(){
s += $(this).attr('name')+":";
s += $(this).val()+";";
});
return s;
}
});
class Form extends Controller{
function Form(){
parent::Controller();
session_start();
}
function unsubmit($v=6){
print $v;
}
}
字符串中传递给控制器函数的任何内容都是空格或句点转换为下划线。我在这个框中键入hello world,然后打印出hello_world。
$w = explode(';',$v);
foreach($w as $i){
$x = explode(':',$i);
if(isset($x[1])){
$_AJAX[$x[0]] = $x[1];
}
}
答案 0 :(得分:1)
在http://sholsinger.com/archive/2009/04/passing-email-addresses-in-urls-with-codeigniter/找到了这个,现在已经解决了。
通过URI段传递的值的周期可能会在特定条件下不正确地转换为下划线。为此,您必须使用mod_rewrite,并且您的RewriteRule指令也会通过查询字符串传递重写的段。例如:
RewriteRule ^(.*)$ /index.php?/$1 [L]
要解决此问题,您必须编辑配置值uri_protocol。默认值为“AUTO”。必须将其设置为“QUERY_STRING”。例如:
$config['uri_protocol'] = 'QUERY_STRING';
答案 1 :(得分:0)
Php不会转换数据而是转换变量名称 您确定无法更改字段名称吗?
答案 2 :(得分:0)
据我所知,没有。
正如您所说,PHP正在重命名变量,如Variables From External Sources PHP手册页中所述:
但是,我不确定为什么这会有所作为。存储在该变量中的数据保持不变。注意:变量中的点和空格 名称将转换为下划线。 例如&lt; input name =“a.b”/&gt; 变成$ _REQUEST [“a_b”]。
答案 3 :(得分:0)
如果您需要保留它们,请考虑发送其他内容,然后application/x-www-form-urlencoded
或multipart/form-data
。例如,这个好听的问题尝试使用JSON,您可以随意解析:handle json request in PHP
JSON更易于解析。但是,您可以使用application/x-www-form-urlencoded
表单(无法处理文件上传),file_get_contents('php://input')
,并根据自己的喜好解析字符串。
有一个肮脏,肮脏的黑客,我很高兴在上周被告知这也适用于multipart/form-data
:Get raw post data
错过了“我只是使用帖子,用':'分隔键和值,并与';'配对“显然:
$.ajax({
url: '/form/'+n+'/'+v,
type: 'post',
contentType: 'text/plain', //<-- add this
可能会解析:
<?php
$post = file_get_contents('php://input');
$pairs = explode(':',$post);
$values = array();
foreach($pairs as $pair){
$vars = explode(':',$pair,2);
$values[$vars[0]] = $vars[1];
}
?>