更新:感谢Rob,我发现当只是在iOS Safari中键入地址时,服务器也没有看到查询字符串参数(Chrome Mac OS,但工作正常)。所以看起来它在服务器端可能会有些奇怪。
我遇到一个奇怪的问题,即以下代码未发送请求的查询字符串部分。如果我在服务器端登录$_SERVER['QUERY_STRING']
,则为空。但是,如果我只是将URL输入浏览器,服务器就会正确记录它。
同样奇怪的是,如果我记录NSURL
,[nsurl query]
会很好地选择查询字符串,因此问题似乎与NSURLConnection
或NSURLRequest
有关。
NSString* queryString = [self.appDelegate.connections componentsJoinedByString:@"|"];
NSString* url = [NSString stringWithFormat:@"http://mysite.com/?%@&isajax=1", queryString];
NSLog(@"url: %@", url); // http://mysite.com/?test&isajax=1
NSURL* nsurl = [NSURL URLWithString:url];
NSLog(@"nsurl: %@", [nsurl query]); // test&isajax=1
NSURLRequest *request = [NSURLRequest requestWithURL:nsurl];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^( NSURLResponse* response, NSData* responseData, NSError* error ) {
// returns the page as if no query string were present at all
}];
我想知道它是否与缺少文件名有关。也许NSURLConnection
不喜欢这样。 编辑:不,与此无关。试过/index.php?test&isajax=1
但仍然没有好处。
答案 0 :(得分:1)
如果您需要请求参数,则应该访问$_REQUEST
,而不是$_SERVER
。或者,如果是帖子查询,则可以使用$_POST
。但是according to the documentation
,$_SERVER
会返回服务器标头:
$_SERVER
是一个包含标题,路径和脚本位置等信息的数组。
一个关联数组,默认包含$ _GET,$ _POST和$ _COOKIE的内容。
因此,如果您的请求是:
http://mysite.com/?test=abc&isajax=1
然后$_REQUEST['test']
将返回abc
而$_REQUEST['isajax']
将返回1
。
如果您真的想要未解析的查询字符串,您当然可以使用$_SERVER
。因此,请考虑以下PHP代码:
<?php
echo $_SERVER('QUERY_STRING');
?>
以下Objective-C代码(检查NSURLConnection
相关错误):
NSURL *url = [NSURL URLWithString:@"http://myurl.com/?test=abc&isajax=1"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (error)
{
NSLog(@"%s: sendAsynchronousRequest error: %@", __FUNCTION__, error);
return;
}
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"result string: %@", string);
}];
按预期返回:
result string: test=abc&isajax=1
如果你没有得到任何东西,你可能想在php中打开错误记录,这样你就可以看到你是否也遇到任何php错误。 (例如,在php.ini
暂时设置display_errors = On
。)
答案 1 :(得分:0)
原来,as according to this answer,问题不在于NSURLConnection
或手机,而在于我在服务器端使用了mod-rewrite。 url参数没有被显式匹配,因此不知何故被PHP解释为查询参数,尽管奇怪的是它们仍然是页面看到的url的一部分,正如$_SERVER['REQUEST_URI']
和$_SERVER['HTTP_REFERER']
所反映的那样。 (但不是$_SERVER['QUERY_STRING']
)。 Chrome如何解决这个问题我不知道。
我的解决方案是只检查REQUEST_URI
而不是QUERY_STRING
,而不是担心mod-rewrite,这是一个严重的痛苦。 ;)