我正在尝试传递一个类似于此的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";
}
通过此更新,我可以获得成功消息,但这就是它。我无法让查询运行。
答案 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