Ios

NSCocoaErrorDomain Code = 3840 'No se pudo completar la operación. (Error de Cocoa 3840.) '

Nscocoaerrordomain Code 3840the Operation Couldn T Be Completed

original:

http://stackoverflow.com/questions/19874935/afnetworking-2-0-post-issue-cocoa-error-3840json-text-did-not-start-with-array



pedir:



Estoy intentando llamar a api.php en mi servidor local (usando MAMP). Se está llamando al api.php del lado del servidor, pero el contenido de _POST dentro del código php contiene el siguiente error:



Error Domain = NSCocoaErrorDomain Code = 3840 'No se pudo completar la operación. (Error de Cocoa 3840.) '(El texto JSON no comenzó con una matriz u objeto y la opción para permitir fragmentos no se estableció). UserInfo = 0x15d7bdd0 {NSDebugDescription = El texto JSON no comenzó con una matriz u objeto y la opción para permitir fragmentos no se estableció.}

Mi aplicación que está intentando enviar la solicitud JSON POST a api.php es una aplicación de iOS que usa AFNetworking 2

Este es mi código de solicitud:



|_+_|

Busqué en Internet, pero no puedo encontrar una respuesta para mi problema específico. No importa lo que haga, obtengo el mismo error.

¿Por qué mi JSON no está formateado correctamente? Tampoco parece que pueda encontrar una manera de olfatear el JSON que en realidad estoy enviando.

Gracias.

responder:

Cuando utilice la API como en su ejemplo, su mensaje HTTP se redactará utilizando un tipo de contenido - (void)postUpdateRequest { if (!dataModel) dataModel = [[DataModel alloc] init] NSDictionary *params = @{@'foo': @'bar2'} NSLog(@'%@',params) /* NSDictionary *params = @{@'cmd':@'update', @'user_id':[dataModel userId], @'token':[dataModel deviceToken] }//@'ip_address':[dataModel getIPAddress]}*/ AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager] // manager.requestSerializer = [AFJSONRequestSerializer serializer] [manager POST:ServerApiURL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@'JSON: %@', responseObject) } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@'Error: %@', error) }] }. Internamente, su application/x-www-form-urlencoded El diccionario está codificado por AFN (aunque no es estrictamente correcto según lo especificado por w3c) y se establece como el cuerpo de la solicitud.

Dado que no especificó un param encabezado, el servidor es libre de elegir el tipo de contenido para los posibles datos de respuesta (si corresponde).

Cuando reciba una respuesta, debe siempre verifique el código de estado HTTP y el tipo de contenido de un cuerpo de respuesta (si lo hubiera).

Es probable que el servidor haya devuelto un código de estado que indique algún problema y un cuerpo de respuesta que contenga una 'respuesta de error' en algún tipo de contenido diferente al esperado (por ejemplo, devolvió texto / html).

Acerca de la solución china:

Utilice el mensaje de error de datos de análisis de tramas de AFNetworking

Error en la solicitud de datos

Error Domain = NSCocoaErrorDomain Code = 3840 'No se pudo completar la operación. (Error de Cocoa 3840.) '(El texto JSON no comenzó con una matriz u objeto y la opción para permitir fragmentos no está configurada). UserInfo = 0x9b7eba0 {NSDebugDescription = El texto JSON no comenzó con una matriz u objeto y la opción para permitir fragmentos no está configurada.}

resolver:

AFNetWorking de la biblioteca de análisis JSON es el modo predeterminado de AFJSONRequestOperation utilizado, solo admite text / json, application / json, text / javascript, por lo que si se produce un error de código = -1016, el modo de análisis JSON actual es text / html, por lo que debe agregar este código:

[AFJSONRequestOperation addAcceptableContentTypes: [NSSet setWithObject: @ 'text / html']] // agregue esta oración

NSURL * url = [NSURL URLWithString: [NSString stringWithFormat: @ '% @', kDMBaseURL]]

NSURLRequest * solicitud = [NSURLRequest requestWithURL: url]

[AFJSONRequestOperation addAcceptableContentTypes: [NSSet setWithObject: @ 'text / html']] // agregue esta oración

AFJSONRequestOperation * jsonOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest: solicitud exitosa: ^ (NSURLRequest * solicitud, NSHTTPURLResponse * respuesta, id JSON) {

DMLog (@ 'str% @', JSON)

} error: ^ (NSURLRequest * solicitud, NSHTTPURLResponse * respuesta, NSError * error, id JSON) {

DMLog (@ 'error en la solicitud de datos% @', error)

}]

[inicio jsonOperation]

Deje que admita el modo texto / html se puede resolver

Error en la solicitud de datos

Error Domain = NSCocoaErrorDomain Code = 3840 'No se pudo completar la operación. (Error de Cocoa 3840.) '(El texto JSON no comenzó con la matriz u objeto y la opción para permitir fragmentos no se estableció). UserInfo = 0x9ba1b30 {NSDebugDescription = El texto JSON no comenzó con la matriz u objeto y la opción para permitir fragmentos no se estableció.}

resolver:

No es una cadena JSON válida devuelta dentro de la biblioteca cuando transformó un error en el lanzamiento

Es decir, la última oración ciertamente está en el lado del servidor, corte la salida para datos adicionales antes de los datos JSON de salida especificados, error. El servidor puede ir a la sección de juicio.