【发布时间】:2011-06-24 14:50:55
【问题描述】:
我正在从我的 $.ajax 调用中调用一个 php 函数来向数据库添加一个新项目。 php 函数回显一个逗号分隔的值列表,我想在我的 ajax 成功函数中使用这些值。
问题是来自 ajax 成功函数的数据似乎有一些额外的、不需要的数据附加到返回字符串的前面,我不知道这是从哪里来的!
这里是php函数:
function add_event_role()
{
//validated by jquery already
$newID = $this->Event_model->insert_event_role(
$this->input->post('roleEventType'),
$this->input->post('roleName'),
$this->input->post('roleRate'));
//create return value for ajax of id,name of event type
$retStr = $newID . ',' . $this->get_event_type_name($this->input->post('roleEventType'));
log_message('error','retStr=' . $retStr);
echo $retStr; //to send back to ajax call
return $newID;
}
这里是调用这个的 jquery:
//set form data into a variable
var dataString = 'roleEventType='+ typeId+'&roleName='+name+'&roleRate='+rate;
$.ajax({
type:"POST",
url:"<?php echo site_url('settings/add_event_role'); ?>",
data: dataString,
cache: false,
success:function(data)
{
//split the return from add_event_role (it's: id,name)
var splitArr = data.split(',');
//message user
$.jGrowl("New event role added!", { header: 'Success' });
//reload event roles to show new event role
var newRow = "<tr><td>"+splitArr[1]+ "</td><td>"+name+"</td><td>"+rate+"</td><td><a href=\"edit\" id=\"" +splitArr[0]+"\" class=\"editEventRole\">Edit</a> / <a href=\"delete\" id=\"" +splitArr[0]+"\" class=\"deleteEventRole\">Delete</a></td></tr>";
$("#eventRoleList").append(newRow);
//clear add event form
//...
}
});
例如:php 函数最终创建了字符串“12,role”并回显该字符串。当它到达成功函数时,它现在显示为:“role12,role”。有人知道为什么要附加名称吗?我觉得这很简单,但现在我看不到它,所以非常感谢任何帮助! :)
更新:
感谢 Val 和 Jonathan Kuhn 的帮助,我将问题追溯到函数中对“echo”的杂散调用:get_event_type_name 将名称附加到以下 echo 中。
也许这个问题应该被删除,因为这个错误毕竟与 Jquery/Ajax 没有真正的关系?
【问题讨论】:
-
怀疑它是其中之一:echo $retStr;或返回 $newID;注释掉一个并尝试一下
-
是的,这两个都试过了...但是当然,我需要 echo $retStr 从 php 函数中取回值...
-
尝试执行 $retStr 的 var_dump()。然后您可以查看额外的字符是在 $retStr 之外还是在脚本中的其他地方被发送出去。
-
var_dump 在 $retStr 中显示了正确的字符串,这表明额外的数据被附加到其他地方。有什么想法吗?
-
在评论中指出 $retStr;输出它以供ajax读取作为响应,您可以在
echo $retStr之前var_dump($newID);,您应该有类似int(2)(12)的东西,如果您得到类似string(6)role12的东西,那么问题出在您的$newID;