我使用jQuery将数据输入到php文件并通过json返回结果。但是,json出现在firebug中,但变量'messageOutput'没有在表单上显示结果。如果我用'msg.box'替换'messageOutput',那么打印就好了。
如果我在表单上输入了多个项目,则会出现错误:'object object'。
有人可以指出我的错误在哪里,因为我多年来一直在努力解决这个问题。如果您需要查看更多代码,请询问。非常感谢。
jQuery代码:
submitHandler: function() {
if ($("#BA_boxform").valid() === true) {
var data = $("#BA_boxform").serialize();
$.post('/domain/admin/requests/boxes/boxesadd.php', data, function(msg) {
var messageOutput = '';
for (var i = 0; i<msg.length; i++){
messageOutput += msg[i].box+' ';
}
$("#BA_addbox").html("You have entered box: " + "<b>" + messageOutput + "</b><br /> You may now close this window.");
$("#BA_boxform").get(0).reset();
}, 'json');
} else
{
return;
}
},
success: function(msg) {
//$("#BA_addbox").html("You have entered a box");
//$("#BA_boxform").get(0).reset();
}
boxesadd.php
<?php
$dept = mysql_real_escape_string($_POST['customerdept']);
$company = mysql_real_escape_string($_POST['BA_customer']);
$address = mysql_real_escape_string($_POST['customeraddress']);
$service = mysql_real_escape_string($_POST['BA_service']);
$box = mysql_real_escape_string($_POST['BA_box']);
$destroydate = mysql_real_escape_string($_POST['BA_destdate']);
$authorised = mysql_real_escape_string($_POST['BA_authorised']);
$submit = mysql_real_escape_string($_POST['submit']);
$boxerrortext = 'You must enter a box for intake';
$array = split('[,]', $_POST['BA_box']);
if (isset($_POST['submit'])) {
foreach ($array as $box) {
if (empty($box)) {
$error = array('boxerrortext'=>$boxerrortext);
$output = json_encode($error);
echo $output;
}
else
{
$form=array('dept'=>$dept,
'company'=>$company,
'address'=>$address,
'service'=>$service,
'box'=>$box,
'destroydate'=>$destroydate,
'authorised'=>$authorised,
'submit'=>$submit);
$result=json_encode($form);
echo $result;
?>
答案 0 :(得分:1)
很难调试它而不知道请求响应是什么样的。你确定服务器返回一个数组吗?我不熟悉php,所以我不会在那里提供帮助,快速查看似乎php'数组'实际上更类似于js对象文字然后是js数组。即它看起来像是一堆键/值对。
在这种情况下,您应该使用for / in循环而不是for / each
for ( var key in msg )
messageOutput += msg[key] // => concats dept, company, address, etc
如果你真的在期待这些对象的数组(你有一堆带有prop'box'的对象),那么你在javascript中正确地执行它但你可能没有从服务器发回正确的对象
你可以弹出开发面板/ firebug并向我们展示从服务器返回的内容吗? 尝试添加:
console.log($.isArray(msg))
并查看它是否返回true。确保返回内容的一种方法是使用数组,我称之为splat实用程序:
function splat(obj){
return $.isArray(obj) ? obj : [ obj ];
}
这确保你总是处理一个数组,虽然有时是一次数组