【问题标题】:Sending hidden input to php script via ajax not working通过ajax向php脚本发送隐藏输入不起作用
【发布时间】:2012-11-20 21:55:39
【问题描述】:

我正在尝试让我的 ajax/json 脚本工作,我查看了 stackoverflow,但找不到任何看起来有帮助的东西。基本上,我要做的就是当用户单击提交按钮时,将隐藏的输入值通过 ajax 发送到另一个 php 脚本,在那里它将被更改等等......然后通过 ajax 发回并显示在里面div 通过响应,我不确定我做错了什么。

目前我什么也没得到,没有输出或任何东西。

我会在下面给出的代码中尽可能详尽,感谢所有帮助。

主页上的 AJAX 脚本

<script>
$(document).ready(function () {
  $(".add_detail_land_down").click(function () {
    var hidden_count = $('input[name=addon_detail_hidden_count]').val();
    $.ajax({
      type: "GET",
      url: "ajax_script.php",
      data: {
        hidden_count: hidden_count
      },
      dataType: "json",
      statusCode: {
        success: function (data) {
          $("#total_hidden").html(data.total_hidden);
        }
      }
    });
  })
});
$(".add_detail_land_down").click();
</script>

主页上的表单头(我想我不妨添加它,以防万一)

<form action="" method="post">

主页面的隐藏输入

<input type="hidden" name="addon_detail_hidden_count" id="addon_detail_hidden_count" class="addon_detail_hidden_count" value="1" />

主页面上启动ajax进程的提交按钮

<input name="add_detail_land_down" type="submit" class="add_detail_land_down" value="add_detail_down"/>

ajax_script.php 中的代码

    <?php 

$hidden_count = $_GET["hidden_count"];

$hidden_count = $hidden_count + 1;
include 'connect_to_mysql.php';

echo json_encode(array("total_hidden" => $hidden_count ));

 ?>

感谢大家的帮助

【问题讨论】:

  • 您是否使用过任何开发工具(例如 Firebug)来观察请求/响应周期中的错误?
  • 是的,我在 chrome 中尝试过开发人员工具,但似乎没有出现任何错误

标签: php javascript jquery ajax json


【解决方案1】:

为什么要将success callback 嵌套在 statusCode

应该是

dataType: "json",
success: function (data) {
    $("#total_hidden").html(data.total_hidden);
}

使用状态码 200 而不是 success

dataType: "json",
statusCode: {
     200 : function (data) {
          $("#total_hidden").html(data.total_hidden);
     }
}

【讨论】:

  • +1 这可能是失败的主要原因 - 好地方!
  • 感谢您的回答,我做了您建议的更改以及此处的其他一些答案,它现在正在工作
  • @AlWise .. 很高兴能帮上忙 :)
【解决方案2】:

在提到的所有其他问题中:statusCode/success 语法问题,以及document.ready 的 click trigegr outlsde 您还需要阻止浏览器默认提交表单。

目前您的页面在您提交时可能会刷新...正常的浏览器行为。

在点击处理程序中,您需要通过返回false 或使用preventDefault() 来防止这种情况发生

$(".add_detail_land_down").click(function (event) {

   /* use either of these */

   /* before your ajax code */
    event.preventDefault();

    /* or after your ajax code*/

     return false;

})

【讨论】:

  • 嗨,谢谢你的回复,我认为它确实解决了它,这是最终的代码,我知道有点基本,但这只是为了让它工作,然后我会移动它到我的主要网站,有什么可以批准的吗?非常感谢您的帮助 - pastebin.com/VSKyiwRy
  • 唯一的建议是 ID 选择器在浏览器中的查找速度更快,并且通常比 name = .... 更容易编写。由于您的元素具有 ID,因此变化不大。另一个捷径...您可以将点击触发器链接到点击处理函数$(selector).click(fuction(){ /* code*/}).click();
【解决方案3】:

statusCode 是数字,对于您的情况应该是 200 将其从 success 更改为 200,如下所示:

statusCode: {
    200: function (data) {
        $("#total_hidden").html(data.total_hidden);
    }
}

【讨论】:

    【解决方案4】:

    你的成功回调应该这样指定(如果你只关心 200):

    success: function (data) {
        $("#total_hidden").html(data.total_hidden);
    }
    

    此外,您尝试在元素上执行 click() 的位置实际上可能发生在文档加载之前,因此在 onclick 处理程序准备好之前执行。如果您想在文档就绪时自动触发,这应该在 onclick 之后的文档就绪内。

    【讨论】:

    • 我认为第一种情况应该没有问题.. Key 可以带或不带引号.. 这不是问题.. 因为它是普通的 javascript 对象而不是 json 字符串
    • @charlietfl 至少,您的意图令人困惑,因为您有一个指定了特定名称的变量。我个人会更改变量的名称。不过,我已经从我的答案中删除了,因为你说得对,这实际上不是问题。
    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 2013-01-16
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多