【问题标题】:passing form data to mySQL through AJAX通过 AJAX 将表单数据传递给 mySQL
【发布时间】:2011-10-10 16:57:43
【问题描述】:

我正在使用 JavaScript 和 AJAX 将表单数据发送到 php 处理文件,然后在不刷新初始表单页面的情况下填充 SQL 数据库。

php/SQL 连接正常,但表单数据未正确发送。

有两个字段:一个名为“choice”的单选组和一个名为“cmets”的文本字段。填充数据库时,选择字段始终为“是”(3 个单选按钮中的第一个),而 cmets 字段始终为空白。我认为问题一定出在构建数据字符串的方式上,但数小时的修修补补没有带来成功。

这是html表单

<form id="paPoll">
  <label><input type="radio" name="RadioGroup1" value="yes" id="choice1">Yes</label>
  <label><input type="radio" name="RadioGroup1" value="no" id="choice2">No</label>
  <label><input type="radio" name="RadioGroup1" value="dont_know" id="choice3">I Don't Know</label>
  <label for="comments">Comments?</label><input name="comments" type="text" id="comments" size="25" maxlength="60">   
  <input type="button" name="form_process" id="form_process" value="submit" onClick="$.fn.removeMbMenu($.mbMenu.options.actualOpenedMenu,true);" />
</form>

这里是 Javascript/AJAX 函数

<script type="text/javascript">
    $(function() {
      $("#form_process").click(function() {
        var choice = $("#choice").val();
        var comments = $("#comments").val();
        var dataString = 'choice='+ choice + '&comments=' + comments;

        $.ajax({
          type: "POST",
          url: "**ABSOLUTE URL TO PROCESSOR**",
          data: dataString
        });
      });
    });
</script>

这里是 php 处理器

<?php
$choice = $_POST ['choice'];
$comments = $_POST ['comments'];
//perform insert
    $query = mysql_query("INSERT INTO paPoll 
    (choice, comments)      
    VALUES  
    ('$choice', '$comments')");         
        if (!query) {
           die("Database query failed: " . mysql_error());
        }
?>

想法或建议?

我在这里发现了一个非常相似的问题,但该线程已有 3 年历史。一位用户提出了这个建议

//Instead of using
data: dataString
//use
data : {param: value, param2: value2}

但我不确定他要如何或以什么格式获取参数值。

谢谢
-音节

【问题讨论】:

  • 您也可以添加 HTML 表单的相关部分吗?我认为单选按钮不能有ID,而是name,你必须弄清楚哪个被选中(所有按钮共享一个name)。
  • 收音机不能在同一个 ID 内。做出这个选择0,choice1,choice2
  • 谢谢大家,我将 id 更改为choice0,1 等。这是我不久前修复的,一定是因为愤怒的 ctrl-z 发脾气而撤消了。
  • @sylable:为数据使用哈希时的参数值是字符串(或可以准确转换为字符串的东西,如数字)。 jquery 基本上采用此哈希并在其上运行$.serialize,将其转换为您尝试手动编码的字符串。说到这,如果您要手动执行,我相信您需要 encodeURIComponent() 每个值。

标签: php forms jquery


【解决方案1】:

如果是我,我会使用Form plugin 让自己更轻松。它已经有了ajaxSubmit 的一组函数,可以毫不费力地使您的表单进行ajaxify。 IT 还具有方便的formSerialize 函数,该函数将序列化表单以进行 ajax 提交或附加到链接的查询字符串。 :-)

这表示没有插件并利用现有代码的更简单方法:

$("#form_process").click(function() {

  $.ajax({
    type: "POST",
    url: "**ABSOLUTE URL TO PROCESSOR**",
    data: {
      'choice': $("input[@name=RadioGroup1]:checked").val(), 
      'comments':  $("#comments").val()
    }
  });

});

不过,无论哪种方式,您还需要将所有单选输入更改为具有唯一 ID(或根本没有 ID)...您不能使用相同的 ID,因为它要求所有 id 属性在文档中具有唯一值。

【讨论】:

  • 非常感谢 prodigitalson。这有助于填充正确的收音机选择,但 cmets 字段每次仍然是空白的。另外,感谢表单插件;但是,我尝试实施它没有成功。这就是我切换回更基本的 AJAX 功能的原因。
  • 尝试更改 th cmets 输入,使 nameid 属性彼此不同。例如&lt;input name="comments" id="field_comments" type="text" size="25" maxlength="60" /&gt;,然后使用$('#field_comments').val() 获取值或$('input[@name=comments]').val() 此外,如果您想发布有关表单插件ID 问题的单独问题,很乐意看看:-)
  • 感谢您一直以来的帮助。又不行了。我对此感到非常困惑和沮丧。我将 id 更改为不同的值并尝试了 $('#get_cmets').val() 但 cmets 字段仍然没有填充。 $('input[@name=cmets]').val() 引发了无法识别的表达式错误,尽管这是我用于广播组的内容。感谢您为表单插件提供的帮助,但由于结果相同,我无法告诉您我遇到了什么问题;没有评论字段人口。 -音节
【解决方案2】:

几周前我遇到了同样的问题,我只是尝试使用这样的旧方法

<script type="text/javascript">
    $(function() {
      $("#form_process").click(function() {
        //$("#choice").val(); //you cannot use the same id for more than 1 tag
        var choice = 0; 
             if(document.getElementById("choice1").checked) choice='Yes';
        else if(document.getElementById("choice2").checked) choice='No';
        else if(document.getElementById("choice3").checked) choice='Dont Know';

        var comments = document.getElementById('comments').value; //$("#comments").val();
        var dataString = 'choice='+ choice + '&comments=' + comments;

        $.ajax({
          type: "POST",
          url: "**ABSOLUTE URL TO PROCESSOR**",
          data: dataString
        });
     });
   });
</script>

我真的不知道,我认为这不是最好的方法,但这对我有用:)

【讨论】:

  • 谢谢bungdito的回答,好想用无线电组if语句。然而,这对我不起作用。
猜你喜欢
  • 1970-01-01
  • 2012-12-19
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多