このように投稿リクエストをサーバーに送信します。
-(Produkt*)fetchProductByID:(int)idNumber
{
NSString* command = @"fetchProduct";
NSString* number = [NSString stringWithFormat:@"%d",idNumber];
NSMutableDictionary* params =[NSMutableDictionary dictionaryWithObjectsAndKeys:
command, @"command",
number, @"id",
nil];
[self commandWithParams:params onCompletion:^(NSDictionary *json)
{
//result returned
NSDictionary* res = [[json objectForKey:@"result"] objectAtIndex:0];
NSMutableArray* dics = [[NSMutableArray alloc]init];
if ([json objectForKey:@"error"]==NULL && [res count]>0)
{
//success
for(int i=0;i<[[json objectForKey:@"result"]count];i++)
{
res = [[json objectForKey:@"result"] objectAtIndex:i];
[dics addObject:res];
NSLog(@"SPECIAL FETCHED PRODUKT:%@",res);
}
}
else
{
//error
NSLog(@"error:%@",[json objectForKey:@"error"]);
res = [[json objectForKey:@"result"] objectAtIndex:0];
NSLog(@"SPECIAL FETCHED PRODUKT:%@",res);
}
}];
return NULL;
}
しかし、私は常にこのエラーを受け取ります:エラー:操作を完了できませんでした。 (ココアエラー3840。)index.phpコードは次のようになります。
<?
require("lib.php");
require("QMServerAPI.php");
header("Content-Type: application/json");
switch ($_POST['command'])
{
case "fetchAllProduct": //Different question
fetchAllProduct();
break;
case "fetchProduct":
fetchProduct($_POST['id']);
break;
case "insertProduct":
insertProduct($_POST['name'], $_POST['artikelNr'],
$_POST['anleitung'], $_POST['image'], $_POST['editDate'],
$_POST['id']);
break;
case "updateProduct":
updateProduc($_POST['name'], $_POST['artikelNr'],
$_POST['anleitung'], $_POST['image'], $_POST['editDate'],
$_POST['id']);
break;
}
?>
ここでコマンドを実行します。
function errorJson($msg)
{
header('Content-type: application/json');
print json_encode(array("error"=>$msg));
exit();
}
function fetchAllProduct()
{
//fetch all Products
$result = query("SELECT * FROM Produkte");
print json_encode($result);
}
function fetchProduct($id)
{
//fetch specific product
$result = query("SELECT * FROM Produkte WHERE id = '122'");
print jeson_encode($result);
}
function insertProduct($name, $artikelNr, $anleitung, $image,
$editDate, $id)
{
}
function updateProduct($name, $artikelNr, $anleitung, $image,
$editDate, $id)
{
//update old product
}
?>
クエリ関数のコードは次のとおりです。
<?
//setup db connection
$link = mysqli_connect("localhost","root","");
mysqli_select_db($link, "QM");
//executes a given sql query with the params and returns an array as result
function query() {
global $link;
$debug = false;
//get the sql query
$args = func_get_args();
$sql = array_shift($args);
//secure the input
for ($i=0;$i<count($args);$i++) {
$args[$i] = urldecode($args[$i]);
$args[$i] = mysqli_real_escape_string($link, $args[$i]);
}
//build the final query
$sql = vsprintf($sql, $args);
if ($debug) print $sql;
//execute and fetch the results
$result = mysqli_query($link, $sql);
if (mysqli_errno($link)==0 && $result) {
$rows = array();
if ($result!==true)
while ($d = mysqli_fetch_assoc($result)) {
array_Push($rows,$d);
}
//return json
return array('result'=>$rows);
} else {
//error
return array('error'=> $mysqli->error);
}
}
何が間違っているのかわかりません。すべての製品を選択するだけでうまくいくからです。 WHEREを使用するとエラーが発生します。
ご協力いただきありがとうございます。
Cocoaエラー3840はJSON解析エラーです(Stack Overflowで検索すると、 この既存の質問について )。
JSONバリデーターを使用してWebサービスから出力JSONを実行し、実際に仕様に準拠していることを確認することをお勧めします。