如何通过AJAX将JSON发送到PHP?

时间:2015-07-08 01:06:21

标签: javascript php jquery ajax json

我一遍又一遍地试过,它永远不会奏效。我不知道如何在服务器端接收JSON。

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();
    }
}

更深入的PHP(在Db()类中)

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
    }

它给我一个错误说注意:未定义的索引:C:\ wamp \ www \ HCSProjects \ Pigeon \ Main \ databaseButler.php

我不明白你如何在PHP端收到JSON数据?一旦它到达PHP,什么是JSON?如何在服务器端正确接收? :/

我一直在研究这几个小时。在任何地方都没有正确答案。

更新
AJAX请求工作正常,因为我得到响应的4和200。 butler.php文件中的以下行是问题所在:(顺便删除了reqType ....我刚刚创建了url databaseButler.php,没有其他参数)。

if(isset($_POST['req'])){
上面一行中的

'req'是我的JSON值。我在将它发送给PHP之前登录了JSON。 (我的JSON是reqData。我是console.logged formData,这是同样的事情)

{ “ID”: “1615”, “NA”: “Y”, “PH”: “905-525-9140”, “EM”: “h@mcmaster.ca”, “DEP”:“住宅招生“,”req“:”PC Issue“,”cus“:”“,”summ“:”diwjdiwjdi“,”det“:”“,”pri“:”Low“,”dat“:”07/08 / 2015" , “TI M”: “随时”}

顺便说一句,这是我的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);
}

如何在PHP端获取我的JSON值?在任何地方都没有帮助:/

更新:找到解决方案

对于那些感兴趣的人:
问题是newReport编译中的JSON.stringify(formData)。显然,如果它以类似JSON的形式存储,则不需要对formData进行字符串化。就像我试图将已经存在的JSON字符串转换为JSON一样,这打破了它。

此外,当您以URL和JSON格式发送数据时,使用$ _REQUEST而不是$ _POST或$ _GET访问所有内容。但是,您发送的任何JSON数据都采用您发送数据的格式。在我的情况下,我使用POST。因此,要获取ID或名称或服务器端(DatabaseButler PHP),您将使用$ _POST ['id']或$ _POST ['summ']。

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

你先改变

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

要:

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

您应该将datatype设置为jsontext! $就({ dataType:“json”,... });

在php中你必须在使用$ _GET或$ _POST数据之前,   检查是否(isset($ _ POST ['...']))或if($ _ POST ['...'])

答案 2 :(得分:0)

HTTP请求可以是POST或GET,但不是两者都有,并且您的代码正试图通过$_POST$_GET访问变量,这是不行的。 我建议改为使用$_REQUEST,它会照顾它(如果是POST或GET)。 尽管使用type: "POST",jQuery会将其视为“GET”请求,因为您指向带有查询字符串的URL。