「Access-Control-Allow-Origin」の問題について多くのフォーラムを読みました。ほとんどのフォーラムはdataType:'jsonp'の使用を求めていますが、通常、jsonpはGETリクエストをヒットします。私は、POSTリクエストを実行したいと思います。最終的にはGETリクエストも機能しません。
実際、私はiPhoneアプリをPhoneGapに変換しているので、objective-cコードをHTML-5とJquerymobileに書き直しています。私がヒットしようとしている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?をロードできません。Origin nullは、Access-Control-Allow-Originでは許可されていません。
XMLHttpRequestはhttps://externalserver.com/loginAuth?をロードできません。Origin nullは、Access-Control-Allow-Originでは許可されていません。