我正在为我的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上工作而不在我的远程服务器上。如果我将API与http://myURL/iOS/objc.php?getWines=1这样的浏览器一起使用,那就完美了!
感谢您的帮助。
P.S。我已经找到一篇关于在代码中进行一些更改的帖子(更改@sythesis用于手写的getter / setter,但仍然无效)
答案 0 :(得分:0)
您的API看起来期待GET请求而不是POST。使用包含整个URL的NSString创建URL,不要设置任何POST属性。
此外,您可能想要开始检查ASI的替代品。它目前尚未开发,可能永远不会符合ARC标准。我切换到AFNetworking并喜欢它。