2015-07-08 4 views
0

Я пробовал снова и снова, и он никогда не работает. Я не знаю, как получить JSON на стороне сервера.Как отправить JSON на PHP через AJAX?

JS

function newReport_compilation(){ 
... 
return JSON.stringify(formData); 
} 
var formData = newReport_compilation(); //takes all values from my form 
... 
$("#newReport_submit").on('click',function(){ 
ajaxRequestTwo("databaseButler.php?reqType="+2, "text", formData, function(returnedData){ 
console.log(returnedData); //To test 
... 
}} 

function ajaxRequestTwo(reqScript, returnDataType, reqData, callback){ 
    $.ajax({ 
     type: "POST", 
     dataType: returnDataType, 
     url: reqScript, 
     data: {fData:reqData}, 
     contentType: 'application/json; charset=UTF-8', 
     success: function(data) { 
      console.log("AJAX request success."); 
      callback(data); 
     }, 
     fail: function(){ 
      console.log("AJAX request failed."); 
     }, 
     error: function(){ 
      console.log("Error!"); 
     } 
    }); 
} 

PHP (DatabaseButler.php)

function reportInsert(){ 
    def(); 
    //Establish a new connection 
    $repInsCon = new Db(); 
    //Run the insertReport function from the DB class (Send it the report ID & the JSON data of the submitted form) 
    $result = $repInsCon->insertReport($_POST['fData']); 
    echo $result; 
} 
if(isset($_GET['reqType'])){ 
    ... 
    }else if($_GET['reqType']=="2"){ 
     reportInsert(); 
    } 
} 

Deeper PHP (в Дб() класс)

public function insertReport($jsonForm){ 
$newRepData = json_decode($jsonForm,true); 
echo $jsonForm; 
... //I have the SQL INSERT query part commented out here but I can't get here regardless 
    } 

Это дает мне ошибку говоря Примечание: Undefined индекс: FData в C: \ WAMP \ WWW \ HCSProjects \ Pigeon \ Main \ databaseButler.php

Я не понимаю, как вы получите данные в формате JSON на PHP боковая сторона? Что называется JSON, когда он достигает PHP? Как я могу получить его правильно на стороне сервера? :/

Я занимаюсь этим часами. Нет никакого правильного ответа нигде.

UPDATE
Запрос AJAX прекрасно работает, потому что я получаю 4 и 200 на ответ. Следующая строка в файле butler.php является проблемой: (Я удалил reqType кстати .... я только что сделал url databaseButler.php без дополнительных параметров).

if(isset($_POST['req'])){ 

'req' в приведенной выше строке является одним из моих значений JSON. Я console.logged JSON, прежде чем я отправил его на PHP. (My JSON is reqData. I console.logged formData, что то же самое)

{"id": "1615", "na": "Y", "ph": "905-525-9140", " «em»: «[email protected]», «dep»: «Резиденция», «req»: «Проблемы с ПК», «cus»: «», «summ»: «diwjdiwjdi», «det»: », "ИРП": "Low", "Дат": "07/08/2015", "ти м": "в любое время"}

Это моя функция newReport_compilation кстати:

function newReport_compilation(){ 
    var formData = {id:hash(1),na:$("#newReport_name").val(),ph:$("#newReport_phone").val(),em:$("#newReport_email").val(),dep:$("#newReport_department").val(),req:$("#newReport_requestCategory").val(),cus:$("#newReport_otherRequest").val(),summ:$("#newReport_summary").val(),det:$("#newReport_details").val(),pri:$("input[type='radio'][name='priority']:checked").val(),dat:$("#newReport_date").val(),tim:$("#newReport_time").val()}; 
    return JSON.stringify(formData); 
} 

Как получить значения JSON на стороне PHP? Там нет никакой помощи в любом месте, ребята:/

UPDATE: НАШЕЛ РЕШЕНИЕ

Для тех, кто заинтересован:
Проблема была JSON.stringify (FormData) в newReport компиляции. По-видимому, вам не нужно форматировать formData, если она была сохранена в форме JSON. Это было похоже на то, что я попытался преобразовать уже JSON-строку в JSON, которая сломала ее.

Кроме того, когда вы отправляете данные как в URL-адресе, так и в форме JSON, обращайтесь ко всем, используя $ _REQUEST, а не $ _POST или $ _GET. Однако любые данные JSON, которые вы отправляете, проходят в формате, который вы отправляете. В моем случае я использовал POST. Таким образом, чтобы получить идентификатор или имя или серверную часть (DatabaseButler PHP), вы должны использовать $ _POST ['id'] или $ _POST ['summ'].

+2

отправка POST .... поиск GET ... не доставит вас очень далеко – charlietfl

+0

Я использовал $ _POST ['fData']. Что вы имеете в виду? @charlietfl – ykadaru

+0

Сделайте 'var_dump ($ _ REQUEST)' в файле reportInsert.php и сообщите нам, что у него есть. – Bankzilla

ответ

0

HTTP-запрос может быть POST или GET, но не оба, и ваш код пытается получить доступ к переменным через $_POST и $_GET, и это не совсем так. Я бы предложил вместо этого использовать $_REQUEST, и он позаботится об этом (если POST или GET). Несмотря на использование type: "POST", jQuery примет его как запрос «GET», потому что вы указываете URL-адрес с запросом.

+0

Я попытался использовать $ _REQUEST ['fData']. Все еще говорит, что он не определен. :/ – ykadaru

+0

Считаете ли вы, что я должен избавиться от параметра reqData в URL-адресе запроса AJAX и вместо этого поместить его в JSON? @Mindastic – ykadaru

+0

Метод запроса действительно не влияет на супер-глобальные переменные PHP '$ _POST' и' $ _GET'. Вы можете использовать POST 'a = b' для'/url?foo = bar' и access '$ _POST ['a']' и '$ _GET ['foo']' – Phil

0

проходят как JSON вместо text:

ajaxRequestTwo("databaseButler.php?reqType=2", "json", formData, function(returnedData) 

Это даст вам больше ошибки отладки:

error: function(xhr, status, error) { 
    var err = eval("(" + xhr.responseText + ")"); 
    alert(err.Message); 
} 
+0

Он печатает «Ошибка!». из функции ajax. Исходная ошибка исчезла. Ничто другое не изменилось. : | @meda – ykadaru

+0

Что возвращает сервер? – meda

+0

Ничего не угадываю? Я ничего не получил. Если бы я сделал это, консоль зарегистрировала бы его – ykadaru

0

сначала присвойте

ajaxRequestTwo("databaseButler.php?reqType="+2, "**text**", formData, .... 

To:

ajaxRequestTwo("databaseButler.php?reqType="+2, "json", formData, .... 

Вы должны установить datatype в json нет text! $ .ajax ({ dataType: "json", ... });

в PHP вы должны использовать до $ _GET или $ _POST данные, проверить, если (Исеть ($ _ POST [ '... '])) или если ($ _ POST [' ...'])

Смежные вопросы