Javascript JSON谷歌图书和Ajax

Javascript JSON谷歌图书和Ajax,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我有一个搜索框,用户在其中输入一个ISBN号,当提交时,div显示来自Google Books API的信息。此信息以标准格式从JSON文件中检索。我能够在div中显示标题、副标题、作者和描述,没有问题 然后,我有一个“添加到库”按钮,该按钮应将所有这些信息发送到数据库,我的问题是所有字段都从作者处发送。不发送作者姓名,而是将单词“Array”发送到数据库 获取要发送的作者姓名的唯一方法是在Ajax数据对象的末尾添加[0],但是这只发送第一位作者的姓名(如果有3位作者,则会忽略两位作者) 更新-

我有一个搜索框,用户在其中输入一个ISBN号,当提交时,div显示来自Google Books API的信息。此信息以标准格式从JSON文件中检索。我能够在div中显示标题、副标题、作者和描述,没有问题

然后,我有一个“添加到库”按钮,该按钮应将所有这些信息发送到数据库,我的问题是所有字段都从作者处发送。不发送作者姓名,而是将单词“Array”发送到数据库

获取要发送的作者姓名的唯一方法是在Ajax数据对象的末尾添加[0],但是这只发送第一位作者的姓名(如果有3位作者,则会忽略两位作者)

更新-它似乎与JSON相关,如果我将Ajax数据更改为除“作者”、“行业标识”或“类别”之外的任何内容,它就会正常工作。这是因为它们包含一个列表而不是单个字符串吗

JS

$(document).ready(function() {

    $('#submit').click(function(ev) {
        ev.preventDefault();
        var isbn = $('#isbn_search').val(); //get isbn direct from input, no need for php
        var url='https://www.googleapis.com/books/v1/volumes?q='+isbn;
        $.getJSON(url,function(data){
            $('.result').empty();
            $.each(data.items, function(entryIndex, entry){
                var html = '<div class="results well">';                    
                html += '<h3>' + entry.volumeInfo.title + '</h3>';                  
                html += '<h5>' + entry.volumeInfo.subtitle + '</h5>'; 
                html += '<p>' + entry.volumeInfo.authors + '</p>';              
                html += '<p>' + entry.volumeInfo.description + '</p>';
                $('.result').append(html);
            });                        
        });
    });
});
PHP

$isbn = $_POST['isbn'];
$title = $_POST['title'];
$subtitle = $_POST['subtitle'];
$authors = $_POST['authors'];
$decoded_authors = json_decode($authors);
print_r($decoded_authors);
$description = $_POST['description'];

$query = $conn->prepare("INSERT INTO `isbn` (isbn_num,title,subtitle,authors,description) VALUES (?,?,?,?,?)");

$query->bind_param('issss',

$isbn,
$title,
$subtitle,       
$decoded_authors,
$description        
        );
JSON

"volumeInfo":{
"title":string,
"subtitle":string,
"authors":[
string
],
"publisher":string,
"publishedDate":string,
"description":string,
"industryIdentifiers":[
{
"type":string,
"identifier":string
}
],
"pageCount":integer,
"dimensions":{
"height":string,
"width":string,
"thickness":string
},
"printType":string,
"mainCategory":string,
"categories":[
string
],
"averageRating":double,
"ratingsCount":integer,
"contentVersion":string,
"imageLinks":{
"smallThumbnail":string,
"thumbnail":string,
"small":string,
"medium":string,
"large":string,
"extraLarge":string
},
"language":string,
"previewLink":string,
"infoLink":string,
"canonicalVolumeLink":string
},

如果代码非常业余,请原谅,因为我是JS新手,这仅仅是为了个人发展。

您需要在客户端对其进行解码,才能将阵列传递到服务器端。比如:

$.ajax({
     type: 'POST',
     url: 'addIsbnScript.php',
     data: {
         'isbn' : isbn,
         'title' : entry.volumeInfo.title,
         'subtitle' : entry.volumeInfo.subtitle,
         'authors' : JSON.stringify(entry.volumeInfo.authors),
         'description' : entry.volumeInfo.description
     },
     success: function () { 
     $("#add").prop('disabled', true);
    }
});
然后在PHP文件(addIsbnScript.PHP)中



希望这有帮助。干杯

关于
'authors':JSON.stringify(entry.volumeInfo.authors),
?然后在服务器端解析并继续?仅供参考:谢谢@Rory,它现在以以下格式发送值[“Chris Cleave”,“Philippa Gregory”,“Sarah Pekkanen-我将研究如何解析JSON服务器端。我将很快更新。您可以在服务器端使用它来解码。谢谢@Rory,我现在已经了解了我应该做什么。尽管我遵循您的代码时,它仍然以[“Chris Cleave”,“Philippa Gregory”]的格式发送作者,“Sarah Pekkanen-我快到了!是的,在服务器端,您可以使用
json\u decode
获取阵列并根据需要使用它。感谢您的建议,但是当我使用更新的代码时(请参阅原始问题),单词“Array”被发送到数据库?我的查询有问题吗?@johnny_s:是的,如果您不需要分离作者,则不需要用户解码。只需插入
作者
。谢谢@Rory请参阅更新
$.ajax({
     type: 'POST',
     url: 'addIsbnScript.php',
     data: {
         'isbn' : isbn,
         'title' : entry.volumeInfo.title,
         'subtitle' : entry.volumeInfo.subtitle,
         'authors' : JSON.stringify(entry.volumeInfo.authors),
         'description' : entry.volumeInfo.description
     },
     success: function () { 
     $("#add").prop('disabled', true);
    }
});
<?php
   $authors = $_POST['authors'];//'["Chris Cleave","Philippa Gregory","Sarah Pekkanen"]'
   $decoded_authors = json_decode($authors);
   print_r($decoded_authors);// Array ( [0] => Chris Cleave [1] => Philippa Gregory [2] => Sarah Pekkanen)
?>