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 时,一切正常。但是当我通过远程服务器执行此操作时,我的请求总是失败,没有消息。

这是我用 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 而不是我的远程服务器上工作。如果我将 API 与http://myURL/iOS/objc.php?getWines=1之类的浏览器一起使用,那就完美了!

感谢您的帮助。

PS我已经找到了一篇关于对代码进行一些更改的帖子(将@sythesis更改为手写的getter / setter,但仍然无法正常工作)

4

1 回答 1

0

您的 API 似乎期待 GET 请求而不是 POST。使用包含整个 URL 的 NSString 创建您的 URL,并且不要设置任何 POST 属性。

此外,您可能想开始检查 ASI 的替代品。它目前尚未开发,可能永远不会符合 ARC。我切换到 AFNetworking 并喜欢它。

于 2012-05-07T12:02:46.943 回答