jQuery AJAX发布数据丢失了

时间:2011-10-30 20:25:55

标签: ajax jquery

我正在尝试使用AJAX发布数据并将其插入数据库表中。 问题是,有一半的数据丢失了,我不知道为什么。我已经检查了所有参数的名称等因为它似乎我在某个地方有一个错字(我错过了一些字符,但我修复了),但它仍然无法正常工作。 甚至console.log()和警报都会给我我要发布的完整数据,但它永远不会到来,php会输出空参数。停用JavaScript或删除“return false”时php脚本按预期打开并且运行良好,没有数据丢失(正如预期的那样)。

也许我真的只是错过了某个角色...... 我也试过转义(escape())字符串,但它没有改变任何东西。

这是代码和一些日志/警报/回声

$("#itemspeichern").click(function(){
        setVisible("#item-process");

        var itemname = escape($("#itemname").val());
        if ($("#itemneu").is(":checked")) {  
            var itemneu = $("#itemneu").val();
        } else {
            var itemneu = 0;
        }
        var itembild = escape($("#itembild").val());
        var itemkurzb = escape($("#itemkurzb").val());
        var theset = escape($("#theset").val());

        console.log("itemname=" + itemname + "&itemneu=" + itemneu + "&itembild=" + itembild + "&itemkurzb=" + itemkurzb + "&theset=" + theset);

        $.ajax({
            url: "<?php actualPath(); ?>save-admin-action.php",
            type: "POST",
            data: "itemname=" + itemname + "&itemneu=" + itemneu + "&itembild" + itembild + "&itemkurzb" + itemkurzb + "&theset=" + theset,
            success: function(result){
                alert("itemname=" + itemname + "&itemneu=" + itemneu + "&itembild=" + itembild + "&itemkurzb=" + itemkurzb + "&theset=" + theset);
                document.getElementById("item-process").innerHTML = result;
            }
        });

        return false;
    });

这是做什么的: - 输出控制台上所有字段的数据 - 显示警报中的所有数据 但是当它完成保存时,数据库缺少itembild和itemkurzb的值。从php文件获取查询作为响应表明这些字段的参数确实是空的。这是我在php中所做的(我缩短了一点,不要评论SQL注入和东西:P)

$ergebnis = mysql_query("INSERT INTO mk7_items(id, de, neu, kurzbeschreibung, bild) VALUES(DEFAULT, '".$_POST["itemname"]."', ".$_POST["itemneu"].", '".$_POST["itemkurzb"]."', '".$_POST["itembild"]."')");

当我收到响应时,最后两个字段为空,并且没有任何内容保存到数据库中。 正如我所说,将JS设置为OFF并在php上运行它只能很好地工作。

有什么想法吗?我在那里做过的任何愚蠢的错误?

3 个答案:

答案 0 :(得分:3)

您在=中错过了一对data,应该是这样的:

data: "itemname=" + itemname + "&itemneu=" + itemneu + "&itembild=" + itembild + "&itemkurzb=" + itemkurzb + "&theset=" + theset,

或者更好的是,停止使用escape(由于escape不能非常好地处理非ASCII数据而被弃用或encodeURIComponent)并使用{{1参数:

data

那样$.ajax会将您的数据转换为正确的POST(或GET或...)格式,而您不必担心细节。

答案 1 :(得分:2)

$.ajax调用中尝试此操作,而不是自制查询字符串:

data: {
  itemname: itemname, 
  itemneu: itemneu, 
  itembild: itembild, 
  itemkurzb: itemkurzb, 
  theset: theset
}

通过将数据作为Object传递,jQuery将为您转义值:)

编辑:

你也可以serialize这样的完整表格:

data: $('#yourform').serialize()

答案 2 :(得分:0)

如果您在发布的项目中使用特殊字符,则在每个vars之前使用此功能... 样本:

var txt = encodeURIComponent(document.getElementById('txt1').value);