我阅读了很多关于“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。