2011-10-30 5 views
2

Я пытаюсь отправить данные с помощью AJAX и вставить их в таблицу базы данных. Проблема в том, что половина данных отсутствует, и я не знаю почему. Я проверил все имена параметров и т. Д., Потому что казалось, что у меня была опечатка где-то (у меня были некоторые символы, но я исправил это), но все равно это не сработает. Даже console.log() и предупреждения дают мне полные данные, которые я хочу публиковать, но он никогда не прибывает, php выводит пустые параметры. При деактивации JavaScript или удалении «return false»; скрипт php открывается, как ожидалось, и работает отлично, данные не теряются (как и ожидалось).jQuery Опубликованные данные AJAX теряются

Возможно, мне просто не хватает одного символа где-то ... Я также попытался экранировать (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 работает отлично.

Любые идеи? Какие-то глупые ошибки, которые я там делал?

+0

Хм, некоторые прерывания линии отсутствуют, извините за это. – 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: Звучит как хороший аргумент для использования объектной литеральной версии 'data' :) –

1

попробовать это в $.ajax вызове вместо ваших самопроизведённых строк запроса:

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

Передавая данные как объект, JQuery избежит значений для вас :)

Edit:

Вы также могли бы serialize полную форму:

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

Я возьму Взгляните на это. Я видел это где-то и пытался использовать его, но получил синтаксические ошибки (ожидаемый {хотя я имел это так, как вы разместили). Большое спасибо за подсказки – user1021052

0

Если вы используете специальные символы в размещенных элементах, вы используете эту функцию перед каждым vars ... Образец:

var txt = encodeURIComponent(document.getElementById('txt1').value); 
Смежные вопросы