2011-09-01 9 views
5

Sto utilizzando le istruzioni fornite nella pagina ASI here. Sto cercando di inviare alcuni dati a un servizio web e non vedo alcun risultato.Come utilizzare ASI Http in iOS per i dati POST su un servizio Web?

Questo è il mio metodo sendRequest che viene chiamato nel 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"]; 
} 

verifico la stringa dataContent e l'uscita è

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

Se uso ricciolo dal Terminal, ho controllato e questo comando funziona .

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}' 

mia comprensione è che nell'uso ricciolo, ho impostato a JSON, specificare l'indirizzo, specificare i dati che equivale a dataContent nel mio codice. Non accade nulla. Cosa c'è che non va?

Grazie per l'aiuto!

risposta

3

Hai abbastanza molto di tutto tranne il componente più importante che è quello di avviare la richiesta

È necessario aggiungere [request startSynchronous]; per una richiesta sincrona o [requester startAsynchronous]; per una richiesta asincrona (e forse bisogno i metodi delegato per gestire qualsiasi risposta avete indietro)

questo è tutto coperto abbastanza bene nel ASIHTTPRequest How to Use Guide. Le sezioni più rilevanti sono "Creazione di una richiesta sincrona" e "Creazione di una richiesta asincrona". Anche qualcosa da considerare preso da quella pagina:

In generale, è consigliabile utilizzare le richieste asincrone di preferenza per le richieste sincrone. Quando si utilizza ASIHTTPRequest in modo sincrono dal thread principale, l'interfaccia utente dell'applicazione si bloccherà e diventerà inutilizzabile per la durata della richiesta.

2

ci si dimentica di chiamare:

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

Oppure:

[request startSynchronous]; 

Se non si chiama uno di questi, non sarà mai fatto la richiesta :)

1

non vedo una chiamata a [request startSynchronous] (o [request startAsynchronous]) nel codice ... State anche dall'invio della richiesta da nessuna parte?

1

Sembra che non hai chiamato [request startAsynchronous];

Controllare ASIHTTPRequest documentation per maggiori dettagli su come utilizzare

1

Non stai in realtà l'invio della richiesta.

1) È necessario chiamare [richiesta startSynchronous] o [richiesta startAsynchronous]

2) Se si utilizza asincrono (che probabilmente si dovrebbe fare) è necessario impostare il delegato e attuare un - (void) requestFinished: (ASIHTTPRequest *) metodo di richiesta.

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]; 

}

Problemi correlati