2011-07-19 95 views
1

我知道关于这个问题有很多不同的问题,但它们都不属于我。我有一个Ajax请求如下:AJAX,JSON,jQuery和PHP

var responsePacket; 
$.ajax({ 
    dataType: 'json', 
    type:'POST', 
    data:{ 
     "updatePacket":{ 
      "job":"name-update", 
      "firstName":firstName, 
      "lastName":lastName 
     } 
    }, 
    processData: false, 
    url:'modify.php', 
    success: function(json){ 
     console.log(json); 
     responsePacket = json; 

     if(responsePacket.updateStatus==true){ 
      genAlertAlignAndShow('Name Successfully Updated', false, 4000); 
     } 
     else{ 
      genErrorAlignAndShow('Name Update Failed!', false, 4000); 
     } 
    } 
}) 

而且是我在另一端PHP如下:

$updatePacket = json_decode($_POST['updatePacket'], true); 
//and I access variables from the JSON Object like this: 
$job = $updatePacket['job']; 

为响应AJAX,PHP文件会冲出来一个简单的JSON对象,是的,我的标题设置为application/json。这就是我一个输出的JSON响应,我已经测试过它,它似乎回到了AJAX请求时,我钻机它返回一个静态响应:

$responsePacket = array("updateStatus"=>true); 
echo json_encode($responsePacket); 

但现在的问题是 作为你可以看到我输出的数据到控制台,但它说的是null,我推断这表明JSON没有正确地到达PHP。那么,是否有适当的方法来创建JSON对象并准备一个AJAX请求,以便将数据保存到PHP脚本中。

我一直在努力解决这个问题约3小时,现在欢迎任何建议。

+0

'var_dump($ _ POST);' –

+0

我已经复制到上面的代码并创建一个名为'modify.php'的文件,您的代码似乎对我来说工作正常。我能够看到'updateStatus'是'true'。当'updateStatus'为'false'时,你有'if'语句处理case吗?问题可能存在吗? –

回答

0

我想通了。这里是我的AJAX Requst:

$.post('modify.php', { job: "name-update", lastName: lastName }, function(data){ 
    console.log(data); 
}) 

问题:
当声明一个AJAX Post请求将在变量名的报价将会使变量不可直接接收脚本数据。

1

我相信$_POST['updatePacket']实际上并不是一个json字符串。尝试像这样访问它:

$updatePacket = $_POST['updatePacket']; 
$job = $updatePacket['job']; 

不需要json_decode()它。从json_decode() manual(返回值):返回

NULL,如果JSON不能被解码...

试试看吧。正如评论中所提到的,var_dump($_POST);应该是您尝试的第一件事,以确保您获得您的想法。

-1

你做错了。您不发送JSON对象到服务器,您发送键/值对。这正是jQuery所期望的。像这样做,而不是:

data: { 
    "job": "name-update", 
    "firstName": firstName, 
    "lastName": lastName 
}, 

和访问值这样的:

​​
+0

这不是唯一的方法。如果你有一个大的表单,序列化表单会容易得多。这就是该功能存在的原因。它还使您能够重复使用某个功能。 – Goddard

+0

为什么要投票?根据他的例子,他做错了。只要看看接受的答案,并与我的比较!他明白了,但“为什么”是错误的。你应该去投票! – fromvega

0

你可以很容易地用jquery或javascript单独干净地获取表单数据。

所有你需要做的就是.serialize()数据。这里就是一个例子。

$("form").on("submit", function(event) { 
    event.preventDefault(); 
    console.log($(this).serialize()); 
}); 

一旦完成,您可以转换一个看起来像这样的字符串。

"param1=someVal&param2=someOtherVal" 

与此

$params = array(); 
parse_str($_GET, $params); 

这种用法你也想过滤数据,你应该这样做之前,上面。

http://php.net/manual/en/function.filter-input.php 

这样做是否耗时较短,然后将每个单独列出在您的ajax中。你也可以创建一个函数来做到这一点,所以你不会不断地编写ajax样板代码。