0

iOS アプリケーションに ASIHTTPRequest を使用しています。PHP API (以下にコピー) を介してデータベースに接続する必要があります。ASIHTTPRequest でリクエストを行う関数は次のとおりです。

-(void)startRequest {
    NSURL *url = [NSURL URLWithString:PHP_SCRIPT];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setDelegate:self];
    [request setStringEncoding:NSUTF8StringEncoding];
    [request setTimeOutSeconds:50];
    [request setPostValue:@"1" forKey:@"getWines"];
    [request startAsynchronous];
}

MAMP を使用して API でホストされている localy を実行すると、すべて正常に動作します。しかし、遠く離れたサーバーでそれを行うと、リクエストは常に失敗し、メッセージは表示されません。

これは、PHP で記述された API で、遠く離れたサーバーでホストされています。

<?php
 function connectToDB(){
     $connexion = mysqli_connect(HOST, USER, PASSWORD, DATABASE);
     return $connexion;
 }

 function getWines($connexion) {
     $req = "SELECT name, category FROM table WHERE prize_50  != 0 OR
                                                            prize_75  != 0 OR
                                                            prize_150 != 0 OR
                                                            prize_300 != 0";

     $res = mysqli_query($connexion, $req);

     echo '[';

     while($current = mysqli_fetch_assoc($res)) {
        extract($current);
        echo json_encode($current);
     }

     echo ']';

 }

 function getWine($connexion) {

     $name = $_REQUEST["name"];
     $req = "SELECT * FROM table WHERE name='".$name."'";


     $res = mysqli_query($connexion, $req);
     echo "[";
     echo json_encode(mysqli_fetch_assoc($res));
     echo "]";
 }

 $connexion = connectToDB();
 if($connexion) { 
    echo "connected"; 

    if(isset($_REQUEST["getWine"])) {
        getWine($connexion);
    }

    else if(isset($_REQUEST["getWines"])) {
        getWines($connexion);
    }

 }

 else {
     echo "unable to connect to the database";
 }



?>

何が起こったのか、そしてなぜそれが私の遠隔サーバーではなく localHost で機能するのかわかりません。http://myURL/iOS/objc.php?getWines=1のようなブラウザーで API を使用すると、完全に機能します。

助けてくれてありがとう。

PS私はすでにコードにいくつかの変更を加えることに関する投稿を見つけました(手書きのゲッター/セッターの@sythesisを変更しますが、まだ機能していません)

4

1 に答える 1

0

API は、POST ではなく GET リクエストを予期しているようです。URL 全体を含む NSString を使用して URL を作成し、POST 属性を設定しないでください。

また、ASI の代替品のチェックアウトを開始することもできます。現在開発中ではなく、おそらく ARC に準拠することはありません。AFNetworking に切り替えて、気に入っています。

于 2012-05-07T12:02:46.943 に答える