js变量';未定义';在IE中(值由ajax响应设置)


js variable 'undefined' in IE (value was set by ajax response)

我有一个表单,它将输入发布到php脚本(通过ajax)onChange,脚本通过将变量设置为true或false(基于一些评估)来响应。然后,当提交原始页面上的表单时,true/false变量被发送到另一个php脚本。

然而,在IE(9)中,当我提交表单时,我收到一个调试错误,说'eligible' is undefined

## PHP (data processor — php script 1)
if ( $disqualified ) echo '<script type="text/javascript">var eligible = false;</script>';
else echo '<script type="text/javascript">var eligible = true;</script>';
## JavaScript
$.ajax({
url: 'pageprocessor.php', // php script 2
type: "POST",
data: ({
    key: '<?php echo $key; ?>',
    group: '<?php echo $group; ?>',
    eligibility: eligible,
// eligible is set by the response from PHP above
// before this is executed (I'm sure of the order).
    current_page: page,
    cumulative_count: count,
    cumulative_total: total,
    cumulative_progress: progress
}),

相关的注意事项是,当eligible被传递到php时,它的值注册为文本,而不是布尔值。有办法解决这个问题吗 (通过PeeHaa的评论使用1/0而不是true/false

解决方法:使用php的超全局$_SESSION变量将eligible的值从一个脚本传输到另一个脚本。

我要做的是类似(未经测试)的事情:

HTML/PHP-

<?php
$eligible = 1;
if ($disqualified) {
    $eligible = 0;
}
?>
<form action="pageprocessor.php" data-eligible="<?php echo $eligible; ?>">
  <select name="something">
    <option value=""></option>
    <option value="option1">Option1</option>
  </select>
</form>

Javascript

var form = $('form'); // you will need a better (more narrow) selector though
$.ajax({
url: form.attr('action'),
type: "POST",
data: ({
    key: '<?php echo $key; ?>',
    group: '<?php echo $group; ?>',
    eligibility: form.data('eligible'), // you still have to verify this server side!
    current_page: page,
    cumulative_count: count,
    cumulative_total: total,
    cumulative_progress: progress
}),