【问题标题】:404 error because of ajax code?由于ajax代码导致404错误?
【发布时间】:2015-01-25 18:46:29
【问题描述】:

我有一个带有action="" 和许多 AJAX 代码的表单,用于验证或链接选择表单元素,如下所示。

** 我当前的代码(简体)**

<?php
if( isset( $_POST['create_transaction'] ) ) {
 // do something
}
?>

<div>
  <!-- period information will be filled up by ajax -->
  <input type="text" name="period" class="form-control" id="period" readonly />
</div>

<form id="form" method="post" action="">
  <input name="r_date" type="date" value="<?php echo isset( $_POST['r_date'] ) ? $_POST['r_date'] : date( "Y-m-d" ); ?>" class="transaction_date" />
  <input type="submit" name="create_transaction" value="Create" />
</form>

<script>
jQuery(document).ready(function($) {

  // Do this and that...


  /*  Get period information if date is already filled up on page load */
  var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
  var $transaction_date = $(".transaction_date").val();

  if( $transaction_date ) {
    // call ajax for period <-- THIS IS THE PROBLEM CHILD.
    jQuery.ajax({
        url: ajaxurl,
        data: 'action=get_period_by_date&transaction_date='+$transaction_date,
        type: 'GET',
        success:function(results) {
            jQuery("#period").val(results);
        }
    }); 
  }

});
</script>

在这里,我使用输入日期检索期间名称。例如,如果日期是 2014-01-01,那么 #period div 将被 PERIOD-01 填充。如果日期是2014-08-25,那么#period div 将被PERIOD-08 填充。当页面加载时,此日期字段会自动填充今天的日期。

问题是,如果我插入 AJAX 代码以使用日期输入检索期间信息,提交表单(单击“创建”按钮)会导致 404 错误。如果我删除代码,表单就可以正常工作。

get_period_by_date 函数似乎没有问题,因为它正确检索并显示了期间名称。

我的问题的原因是什么?

【问题讨论】:

  • 解决 404 错误后,您必须使用.text().html(),而不是.val(),填写DIV。
  • 我认为如果不将它放在任何事件中,那么使用 ajax 是没有意义的。您可以在input #period 中直接从 PHP 获取该数据。
  • 是的,我检查了 ajaxurl 并且它有正确的 url,并且 ajax 正在按设计运行......
  • 对不起,我不明白。我需要做的是在用户选择日期时(而不是提交日期时)显示期间名称。如何在不使用 ajax 的情况下实现这一目标?
  • 如果您想在用户选择日期时这样做,而不是需要将其放在该选择元素的 change event 中,那么 ajax 就很有用。

标签: javascript php html ajax http-status-code-404


【解决方案1】:

404 错误意味着您的 AJAX 请求导致路径不存在。这是你应该解决的第一个问题:)。

使用你的控制台调试这个:

 var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';

您在 jQuery 方法中使用此 var。我认为它会按字面意思解释。我认为这里不可能使用 php 语法。

我不确定这是否是一个好习惯,但为了快速修复,您可以使用该标签在 html 页面中创建一个隐藏字段。然后你可以很容易地使用 jQuery 或 javascript 从中获取价值

【讨论】:

  • 是的,我通过将 ajaxurl 写入控制台来检查它是否具有有效的 url。此外,此 AJAX 运行良好,因为它将输入日期正确转换为期间名称并在#period 中显示。但是,当我提交表单时,它不会转到 if( isset( $_POST['create_transaction'] ) ) 的 PHP 函数,而是显示 404 错误...
  • console.log(ajaxurl) ?这对我来说似乎很奇怪。无论如何,你可以在这里看看这个:stackoverflow.com/questions/20766803/…
猜你喜欢
  • 1970-01-01
  • 2015-11-27
  • 2015-09-10
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
相关资源
最近更新 更多