この件に関して、投票数が非常に少ない多数の質問を見つけましたが、これまでのところ、答えが得られないようです。Web サーバー上の PHP ページを、mysqli クエリを配列に変換し、json_encode を使用してエンコードして JSON オブジェクトにする application/json にしました。私は現在、JavaScriptを使用してJSONオブジェクトをデコードしようとしていますが、オブジェクトではなく配列を扱う唯一の解決策を見つけることができます。最終的には、クライアントの Sqlite データベースにデータを INSERT できるように、JSON をデコードして反復処理したいと考えています。JSON を文字列化して取得したことを確認できる以外は、クライアントで結果を取得するのに苦労しています。私のコードは次のとおりです。
Web サーバーの retrieveJSON.php ページ
<?php header('Content-Type: application/json');
$mysqli= new mysqli("host","user","password","database");
mysqli_select_db($mysqli,"database");
$query = "SELECT * FROM AppCustomers";
$result = mysqli_query($mysqli,$query) or die('Errant query: '.$query);
$customers = array();
if(mysqli_num_rows($result)) {
while($customer = mysqli_fetch_assoc($result)) {
$customers[] = array('customer'=>$customer);
}
}
$json_array = array('customers'=>$customers,);
echo json_encode($json_array);
mysqli_close($mysqli);
?>
クライアント側の Javascript
<script>
$.ajax({
url : 'http://webserver/retrieveJSON.php',
dataType : 'json',
type : 'get',
success : function(Result){
//ResultAlert = JSON.stringify(Result);
//alert(ResultAlert);
}
});
</script>
結果を文字列化すると、次の JSON オブジェクトの長いバージョンが得られます。
{"customers":[{"customer":{"id":"1","customerName":"Customer Alpha","customerID":" custA","customerAddress":" Alpha Way","customerCity":" Alpha","customerState":" AL","customerZip":"91605"}},{"customer":{"id":"2","customerName":"Customer Beta","customerID":" CustB","customerAddress":" Beta Street","customerCity":" Beta","customerState":" BE","customerZip":"91605"}}]}
データベースがあり、次の挿入機能が既に設定されています。
function insertCustomer(customerName, customerID, customerAddress, customerCity, customerState, customerZip) {
db.transaction(function (tx) {
tx.executeSql('INSERT INTO Customers (customerName, customerID, customerAddress, customerCity, customerState, customerZip) VALUES (?, ?, ?, ?, ?, ?)', [customerName, customerID, customerAddress, customerCity, customerState, customerZip],CountReturns);
});
};
オブジェクトを反復処理して各フィールドを Sqlite データベースに挿入できるように、オブジェクトを配列に戻すにはどうすればよいですか? つまり、 //stringify の部分を何に置き換えるのでしょうか? この質問が局所化されすぎていないことを願っていますが、他の誰かが同じようなことをしようとしている場合に備えて、プロセス全体をレイアウトしようとしました. プロセスにおけるその他のヒントや提案も歓迎します。ありがとう。
Quentin のおかげで、stringify の代わりに次のコードを使用して、配列にアクセスし、フィールドをデータベースに入力することができました。ただし、何らかの理由ですべての入力が未定義でした。
for (var i = 0, len = Result.customers.length; i < len; ++i) {
var customer = Result.customers[i];
insertCustomer(customer.customerName, customer.customerID, customer.customerAddress, customer.customerCity, customer.customerState, customer.customerZip);
}