【发布时间】:2013-01-23 23:09:45
【问题描述】:
我阅读了很多关于“Access-Control-Allow-Origin”问题的论坛。大多数论坛要求使用 dataType:'jsonp',但通常 jsonp 会命中 GET 请求,我想做 POST 请求。最终 GET 请求也不起作用。
实际上我将 iPhone 应用程序转换为 PhoneGap,因此将 Objective-c 代码重写为 HTML-5 和 Jquery 移动。我试图点击的 url 在 Objective-c 中效果很好。
这里是objective-c代码
NSString *username=[self urlEncodeValue:[userNameField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
NSString *password=[self urlEncodeValue:[passWordField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
NSString *params = [[NSString alloc] initWithFormat:@"username=%@&password=%@",username,password];
NSData *paramData = [params dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
[params release];
NSString *paramsLength = [NSString stringWithFormat:@"%d", [paramData length]];
NSString *urlString=[[NSString alloc] initWithFormat:@"%@?",[dict valueForKey:@"LoginAuthentication"]];
NSURL *authURL = [NSURL URLWithString:urlString];
[urlString release];
NSHTTPURLResponse *authenticationResponse= nil;
NSMutableURLRequest *authenticationRequest = [NSMutableURLRequest requestWithURL:authURL];
[authenticationRequest setHTTPMethod:@"POST"];
[authenticationRequest setValue:paramsLength forHTTPHeaderField:@"Content-Length"];
[authenticationRequest setHTTPBody:paramData];
NSError *error = nil;
int errorCode;
NSData *responseData = [NSURLConnection sendSynchronousRequest:authenticationRequest
returningResponse:&authenticationResponse
error:&error];
if ([authenticationResponse respondsToSelector:@selector(allHeaderFields)]) {
//success
}
上面的代码效果很好。
这是我转换为 javascript 的代码,它给出“Access-Control-Allow-Origin”错误
$(document).ready( function() {
$.ajax({
type: "POST",
crossDomain: true,
//dataType:'jsonp',
//callback: '?',
url : "https://externalserver.com/loginAuth?",
data : {'username' : 'username', 'password' : 'password'},
success : function (response) {
alert('login failed');
},
error: function(e){
console.log(e);
}
});
});
我尝试了 GET/POST 请求,并尝试在某个本地服务器上运行此本地文件。没有任何效果。
我收到以下错误消息
XMLHttpRequest 无法加载 https://externalserver.com/loginAuth?。 Access-Control-Allow-Origin 不允许 Origin null。
XMLHttpRequest 无法加载https://externalserver.com/loginAuth?。 Access-Control-Allow-Origin 不允许 Origin null。
【问题讨论】:
-
你把网址加入白名单了吗?
-
是的,我已将 URL 添加到白名单中。顺便说一句,我在浏览器中遇到了这个错误。
-
当您在浏览器中收到此错误时,您是通过服务器访问您的网页还是直接从您的计算机打开 html 文件?
-
@Romain 如果我尝试使用本地服务器,它会给出“Origin localhost:8080 is not allowed by Access-Control-Allow-Origin.”而是空访问错误
标签: jquery cordova jquery-mobile