2011-10-30 62 views
2

我想用AJAX发布数据并将其插入到数据库表中。 问题是,一半的数据丢失,我不知道为什么。我检查了所有的参数名称等,因为它似乎我有一个错别字(我错过了一些字符,但我修正了),但仍然无法正常工作。 即使console.log()和警报提供了我想要发布的完整数据,但它永远不会到达,php会输出空参数。停用JavaScript或删除“返回false”时php脚本按预期打开并且工作得很好,没有数据丢失(如预期的那样)。jQuery AJAX发布数据丢失

也许我真的只是错过了某个地方的单个字符... 我也尝试逃避(逃逸())的字符串,但它并没有改变任何东西。

下面的代码和一些日志/警报/回声

$("#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上运行它只能很好地工作。

任何想法?我在那里犯了什么愚蠢的错误?

+0

嗯,一些linebreaks都失踪了,对此感到抱歉。 – user1021052

回答

4

你错过一对夫妇=data,它应该是这样的:

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

或者更好的,停止使用escape(被弃用,取而代之的或encodeURIComponent由于escape不处理非ASCII数据非常好)和使用对象为您data参数:

var itemname = $("#itemname").val(); 
//... 

$.ajax({ 
    url: "<?php actualPath(); ?>save-admin-action.php", 
    type: "POST", 
    data: { 
     itemname: itemname, 
     itemneu: itemneu, 
     itembild: itembild, 
     itemkurzb: itemkurzb, 
     theset: theset 
    }, 
    //... 
}); 

这样$.ajax将转换的照顾你数据转换为正确的POST(或GET或...)格式,您无需担心细节。

+0

有趣。我注意到了缺失的“=”,并认为我改变了它。但似乎我只为日志做了这些......感谢你提供的额外提示,我会记住 – user1021052

+0

@ User1021052:听起来像是使用对象文本版本的数据的一个很好的参数:) –

1

$.ajax电话试试这个,而不是你自制的查询字符串:

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

通过传递数据作为对象,jQuery将难逃值你:)

编辑:

你也可以这样的完整形式:

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

我会拿看看那个。我看到了某个地方,并尝试使用它,但得到了语法错误(预计(尽管我已经按照您发布的方式)。非常感谢提示 – user1021052

0

如果您在发布的项目中使用特殊字符,则在每个变量之前使用此函数... 样品:

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