Я пытаюсь выполнить PHP-скрипт, который увеличивает поле в базе данных. У меня работает скрипт, и я в настоящий момент полностью модифицирую базу данных с помощью ASIHTTPRequest, но мне кажется, что я должен использовать другой метод, учитывая, что мне не требуется возврат.
Это то, что называется HTTP POST?
incrementOrDecrementURL = [[NSString alloc] initWithFormat:@"http://myURL/doScript.php"]; NSURL *requestURL = [[NSURL alloc] initWithString:incrementOrDecrementURL]; //The actual request ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:requestURL]; // Becoming the request delegate //To get callbacks like requestFinished: or requestFailed: [request setDelegate:self]; // Start request [request startAsynchronous];
form the docs: Отправка формы POST с помощью ASIFormDataRequest
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; [request setPostValue:@"Ben" forKey:@"first_name"]; [request setPostValue:@"Copsey" forKey:@"last_name"]; [request setFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photo"];
Но также обратите внимание, что ASIHTTPRequest больше не поддерживается его оригинальным автором.
Это будет запрос oneway, а не POST.
Но вы никогда не должны обновлять базу данных с помощью запроса GET, поэтому вы должны использовать POST.
Один из способов сделать это – немедленно вернуть ответ, а затем обновить базу данных, но лучший подход, поскольку эта библиотека больше не поддерживается ( http://allseeing-i.com/ASIHTTPRequest/ ), вы можете использовать NSUrlConnection и просто игнорируйте ответ и продолжайте.
ASIHTTPRequest
по умолчанию отправляет запрос GET, а не POST. Правильно, что GET ничего не обновляют на сервере, поэтому вы должны использовать POST: [request setRequestMethod:@"POST"]
. Вы можете просто вернуть doScript.php
ответ HTTP 204 No Content. Функция PHP header () . Но это хороший дизайн, чтобы вернуть хотя бы какой-то код статуса конкретного протокола, относящийся к тому, что на самом деле произошло на сервере. Я часто возвращаю простой ответ JSON, например {"status":"OK"}
.