我一遍又一遍地试过,它永远不会奏效。我不知道如何在服务器端接收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']。
答案 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
设置为json
否text
!
$就({
dataType:“json”,...
});
在php中你必须在使用$ _GET或$ _POST数据之前, 检查是否(isset($ _ POST ['...']))或if($ _ POST ['...'])
答案 2 :(得分:0)
HTTP请求可以是POST或GET,但不是两者都有,并且您的代码正试图通过$_POST
和$_GET
访问变量,这是不行的。
我建议改为使用$_REQUEST
,它会照顾它(如果是POST或GET)。
尽管使用type: "POST"
,jQuery会将其视为“GET”请求,因为您指向带有查询字符串的URL。