2011-09-01 8 views
5

Używam instrukcji podanych na stronie ASI here. Próbuję przesłać niektóre dane do usługi sieci Web i nie widzę żadnych wyników.Jak używać ASI Http w iOS do danych POST do usługi internetowej?

To mój sendRequest metoda, która jest wywoływana w viewDidLoad

-(void)sendRequest { 
    NSURL *url = [NSURL URLWithString:@"http://153.60.6.75:8080/BarcodePayment/transactions"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request addRequestHeader:@"Accept" value:@"application/json"]; 
    [request addRequestHeader:@"Content-Type" value:@"application/json"]; 
    NSString *dataContent = @"{\"id\":7,\"amount\":7.0,\"paid\":true}"; 
    NSLog(@"dataContent: %@", dataContent); 
    [request appendPostData:[dataContent dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setRequestMethod:@"POST"]; 
} 

sprawdzić ciąg dataContent i wyjście jest

{"id":7,"amount":7.0,"paid":true} 

Jeśli używam curl od terminalu, sprawdziłem i to polecenie działa .

curl -X POST -H 'Accept:application/json' -H 'Content-Type: application/json' http://153.60.6.75:8080/BarcodePayment/transactions/ --data '{"id":7,"amount":7.0,"paid":true}' 

moim rozumieniu jest to, że za pomocą curl, ustawić go do JSON, podać adres, podać dane, które są równoważne dataContent w moim kodzie. Nic się nie dzieje. Co jest nie tak?

Dzięki za pomoc!

Odpowiedz

3

Masz dość dużo wszystkiego poza najważniejszym komponentem, który ma rozpocząć żądanie:

Musisz dodać [request startSynchronous]; dla synchronicznego żądanie lub [requester startAsynchronous]; dla Asynchronous życzenie (i ewentualnie potrzebne metod delegat obsłużyć każdą odpowiedź trzeba z powrotem)

To wszystko jest pokryte bardzo ładnie w ASIHTTPRequest How to Use Guide. Najodpowiedniejsze sekcje to "Tworzenie żądania synchronicznego" i "Tworzenie żądania asynchronicznego". Również o czym warto pomyśleć z tej strony:

Zasadniczo zamiast żądań synchronicznych należy używać żądań asynchronicznych. Podczas synchronicznego używania ASIHTTPRequest z głównego wątku interfejs użytkownika aplikacji zostanie zablokowany i stanie się bezużyteczny przez cały czas trwania żądania.

2

zapomniałeś zadzwonić:

[request setDelegate: self]; 
[request startAsynchronous]; 

czyli

[request startSynchronous]; 

Jeśli nie wywołać dowolną z nich, wniosek nie zostanie nigdy wykonany :)

1

nie widzę wezwanie do [request startSynchronous] (lub [request startAsynchronous]) w kodzie ... Czy nawet jego zgłoszenia w dowolnym miejscu?

1

Wygląda na to, że nie nazywają [request startAsynchronous];

Sprawdź ASIHTTPRequest documentation uzyskać więcej informacji na temat korzystania z

1

Nie jesteś faktycznie wysyłania żądania.

1) Musisz zadzwonić [Request startSynchronous] lub [Request startAsynchronous]

2) W przypadku korzystania z asynchronicznym (które powinieneś zrobić) musisz ustawić delegata i realizuje - (void) requestFinished: (ASIHTTPRequest *) metoda żądania.

0
- (void)postThresholdDetails:(NSDictionary *)info 

{ NSString * urlString = [NSString stringWithFormat: @ "% @ @% /", baseurl, PostThresholdDetails]; NSURL * url = [NSURL URLWithString: urlString];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setRequestMethod:@"POST"]; 
[request setDelegate:self]; 
[request setTimeOutSeconds:120]; 
[request addRequestHeader:@"Accept" value:@"application/json"]; 
[request addRequestHeader:@"content-type" value:@"application/x-www-form-urlencoded"]; 
request.allowCompressedResponse = NO; 
request.useCookiePersistence = NO; 
request.shouldCompressRequestBody = NO; 
[request setPostBody:[NSMutableData dataWithData: [info objectForKey:@"jsondata"] ]]; 
[request startAsynchronous]; 

}

Powiązane problemy