json_encode为表单输入返回空值?

时间:2014-02-17 14:55:21

标签: javascript php ajax json forms

我遇到了第一次AJAX表单提交尝试的问题。我有一个基本的HTML表单(http://jsfiddle.net/hmp4A/1/),一个小JS和一个php验证文件。在做一些测试时,我发现我的一些表单输入在我的console.log中以“null”的形式返回,而其他的则没有。

我在这里看到了一些线程,比如json_encode is returning NULL?,并尝试在UTF8中专门编码变量,尝试使用intval()将我的表单字符串转换为int等等。其中一些更改导致“percentequities”字段为null,一些导致为0. json_last_error()返回0代码。

看起来第一次传球中的值很好,但其他任何东西都没有。我错过了什么?

编辑:要清楚:如果我将此更改为常规POST事件到validate.php,并打印出$ _POST变量,输入看起来很好。添加到神秘之处:如果我拿走'magic.js'并对'validate.php'做一个简单的POST,它成功地json_encodes所有输入(我可以在json的echo语句中看到它们)。如果我转身并添加回'magic.js'以便它尝试一个AJAX请求,它会再次为'percentequities'提供空值。

这是'validate.php':

header('Content-Type: text/html; charset=utf-8');
error_reporting(0);
$time_start = microtime(true); 

$errors         = array();      // array to hold validation errors
$data           = array();      // array to pass back data

if(!is_numeric($_POST["spending"])){
    $errors['spending']="Spending must be a numeric value. Please return to the input page and input only numbers and decimal points.";
}
if(!is_numeric($_POST["portfolio"])){
    $errors['portfolio']="Portfolio must be a numeric value. Please return to the input page and input only numbers and decimal points.";
}
if(!is_numeric($_POST["percentequities"])){
    $errors['percentequities']="Percent Equities must be a numeric value. Please return to the input page and input only numbers and decimal points.";
}
if(!is_numeric($_POST["percentbonds"])){
    $errors['percentbonds']="Percent Bonds must be a numeric value. Please return to the input page and input only numbers and decimal points.";
}
if(!($_POST["percentequities"]+$_POST["percentbonds"]==100)){
    $errors['allocationPercentageCheck']= "Allocation must add up to exactly 100%. Please return to the input page and correct these values.";
}

if(!($_POST["percentequities"]+$_POST["percentbonds"]==100)){
    $errors['allocationPercentageCheck']= "Allocation must add up to exactly 100%. Please return to the input page and correct these values.";
}

if ( ! empty($errors)) {
// if there are items in our errors array, return those errors
$data['success'] = false;
$data['errors']  = $errors;
$data['percentequities'] = $_POST['percentequities'];
$data['portfolio'] = $_POST["portfolio"];
$data['jsonlasterror'] = json_last_error();
} else {
// if there are no errors process our form, then return a message
// show a message of success and provide a true success variable
$data['success'] = true;
$data['message'] = 'Success!';
}

echo json_encode($data);

1 个答案:

答案 0 :(得分:0)

我觉得很傻,但正如我所说,这是我的第一次尝试。我没有在JS的“var formData = {}”部分中定义的所有变量。我天真地认为只需要让PHP文件获取POST数据并对其进行json_encode,就会遇到没有定义它的AJAX调用。我错了。