将JSON对象传递给PHP脚本

时间:2016-04-12 13:38:15

标签: javascript php json ajax

我正在尝试传递一个类似于此的JSON对象:

 {"service": "AAS1", "sizeTypes":[{"id":"20HU", "value":"1.0"},{"id":"40FB","2.5"}]}

只需注意:在sizeTypes中,数组中总共有大约58个项目。

当用户单击提交按钮时,我需要能够将对象发送到PHP脚本以运行UPDATE查询。这是应该将JSON发送到PHP脚本的javascript:

 $('#addNewSubmit').click(function()
 {
   var payload = {
     name: $('#addservice').val();
     sizeTypes: []
   };

   $('input.size_types[type=text]').each(function(){
     payload.sizeTypes.push({
       id: $(this).attr('id'),
       value: $(this).val()
      });
   });

   $.ajax({
     type: 'POST',
     url: 'api/editService.php',
     data: {service: payload},
     dataType: 'json',
     success: function(msh){
       console.log('success');
     },
     error: function(msg){
       console.log('fail');
     }
   });
 });

使用上面的点击功能,我试图将对象发送到下面的PHP脚本,这是在api / editService.php中:

 <?php
 if(isset($_POST['service']))
 {
   $json = json_decode($_POST['service'], true);

   echo $json["service"]["name"] . "<br />";

   foreach ($json["service"]["sizeTypes"] as $key => $value){
     echo $value["value"] . "<br />";
   }
 }
 else
 {
   echo "Nooooooob";
 }
 ?>

我还没有UPDATE查询,因为我甚至不确定我是否正确传递了JSON。在javascript单击功能中,您可以看到SUCCESS和ERROR功能。我正在制作的是Chrome控制台中的ERROR功能。

我不确定错误在哪里,在JavaScript或PHP中。

为什么我只能在AJAX帖子中产生错误函数?

修改

我删除了ajax调用中的dataType,并将JSON.stringify添加到data:

 $.ajax({
   type: 'POST',
   url: 'api/editService.php',
   data: {servce: JSON.stringify(payload)},
   success: function(msg){
     console.log('success');
   },
   error: function(msg){
     console.log('fail'), msg);
   }
 });

在PHP脚本中,我尝试了这个:

 if(isset($_POST['service'))
 {
   $json = json_decode($_POST['service'], true);

   foreach ($json["service"]["sizeTypes"] as $key => $value){
     $insert = mysqli_query($dbc, "INSERT INTO table (COLUMN, COLUMN, COLUMN) VALUES (".$json["service"] . ", " . "$value["id"] . ", " . $value["value"]")");
   }
 }
 else
 {
   echo "noooooob";
 }

通过此更新,我可以获得成功消息,但这就是它。我无法让查询运行。

4 个答案:

答案 0 :(得分:2)

没有看到错误,我怀疑错误是因为ajax期待json(dataType:&#39; json&#39;,)但是你在php中回显html

答案 1 :(得分:1)

尝试更改

 error: function(msg){
   console.log('fail');
 }

 error: function(msg){
   console.log(msg);
 }

可能存在一些php错误或语法问题,您应该可以在那里看到它。

还尝试通过添加类似

的内容逐步调试php脚本

echo "still works";die;

在php脚本的开头并向下移动直到它导致错误,然后你就会知道错误的位置。

此外,如果您期待JSON(并且您在js中是 - dataType: 'json',则不要回复您的php中的任何HTML。

答案 2 :(得分:1)

当您在service键中发送对象时,您可能在$_POST['service']中有一个多维数组。

如果要发送字符串,则应将对象转换为json:

data: {service: JSON.stringify(payload)},

现在你可以像在php中一样解码它。

另请注意,如果将dataType设置为json,则只能从php发回json。除了有效的json以外的任何东西都会让你最终进入error处理程序。

答案 3 :(得分:0)

如何处理来自JSON的{​​{1}}响应的示例。通常,editService.php脚本将是 worker ,并将处理您需要完成的任何操作。它(通常)会向editService.php方法发送一个简单的响应返回(考虑更新您的success以使用最新的方法,例如。$.ajax等) 。从那里你可以适当地处理答案。

$.done

示例$.ajax({ method: 'POST', url: '/api/editService.php', data: { service: payload }, dataType: 'json' }) .done(function(msh) { if (msh.success) { console.log('success'); } else { console.log('failed'); } }) .fail(function(msg) { console.log('fail'); }); 以及如何通过/editService.php

使用JSON
$.ajax