2017-02-20 19 views
4

У меня есть безопасный webView, который показывает, как клиент загружает свой кошелек. Я передаю защищенную информацию MPIN (как одноразовый пароль). Существует проблема с«dataTaskWithRequest» запрашивает NSMutableRequest дважды, когда требуется только один запрос.

@IBOutlet weak var loading: UIActivityIndicatorView! 

@IBOutlet var lblLoading: UILabel! 


@IBOutlet weak var mob_webview: UIWebView! 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    mob_webview.hidden = true 
    mob_webview.delegate=self 
    cmmn.createDatabase() 
    linkgot = cmmn.geturl() 

    link="http://*****************************************.jsp?" 

    let request = NSMutableURLRequest(URL: NSURL(string: link)!) 
    request.HTTPMethod = "POST" 
    let postString = "recharge_type=\(_catcode)&amount=\(_amountfiled_got)&mobileNo=\(cmmn.getPhoneNumber())&prePostLan=\(prePostLan)&stdCode=\(_stdCode)&accNo=\(accNo)&deduct_frm=B&rcMobileNum=\(_numberfiled_got)&mobOperator=\(_merch_code)&operator=\(_operatr)&rcType=\(_rec_type)&mpin=\(_mpin)" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 

     if error != nil { 
      print("error=\(error)") 
      return 
     } 

     print("response = \(response)") 

     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 
    } 
    task.resume() 
    mob_webview.loadRequest(request) 







    // Do any additional setup after loading the view. 
} 
func webViewDidFinishLoad(webView_Pages: UIWebView) 
{ 

    mob_webview.hidden = false 
    loading.hidden = true 
    lblLoading.hidden=true 
    print("OK") 

} 

Response в журнале сервера: enter image description here enter image description here

На сервере, если пользователь печатает MPIN неправильно три раза, он будет заблокирован. Это делается на основе количества неправильных обращений к MPIN на сервере. По какой-то причине мой веб-просмотр делает запрос дважды (т. Е. Вызывает ссылку, которая дважды загружает запрос), даже если она загружается только один раз. Предположите, если клиент вводит неправильный MPIN и загружает веб-представление. Ссылка вызывается дважды, он теряет 2 шанса для ввода правильного MPIN. Версия Android нашего APP работает правильно с подобным запросом. Любая причина для этого?

+5

Опубликуйте свой код - запрос и обработчик завершения. Одной строки недостаточно. – Roee84

+0

У вас есть как веб-просмотр, так и запрос 'NSURLSession'? как связаны эти два? Возможно, веб-просмотр делает один запрос, а затем вы делаете другой запрос с помощью «NSURLSession». –

+0

Можете ли вы очистить свой код? Это действительно недостаточно для нас, чтобы посмотреть, что происходит. –

ответ

4

Я прочитал справочный документ Apple после прочтения вашего вопроса. Он говорит, что после загрузки каждого кадра в webview вызывается webViewDidFinishLoad. Here is document

webViewDidFinishLoad: Отправлено после того, как веб-просмотр завершает загрузку кадра.

Просьба проверить с сервером, сколько запросов сделано за один проход. это 2 или один. Также хотите узнать, сколько раз ваш штамп печати в вашем коде исполняет print("response = \(response)"). Поскольку я не консоль для этого утверждения.

В вашем вопросе вы вызываете NSURLSession dataTaskWithRequest, а также запрос на загрузку в веб-представлении. Это может также быть проблемой для одновременного вызова одной и той же вещи. Если вы хотите открыть запрос в webview, не используйте запрос задачи NSURLSession. Запустите его, комментируя task.resume().

+0

Я проверю его как можно скорее. btb оператор print будет выполняться только один раз, независимо от моих посещений на сервере ... Я уже проверил его, прежде чем публиковать этот вопрос. –

+0

Основная причина из запроса 2 - вызов datataskrequest и загрузка запроса в веб-представлении. Если вы прокомментируете «task.resume», ваша проблема будет решена. – sschunara

+0

. Я согласен с этим. У меня есть моя награда .. :) –

1

Вы запрашиваете ваш NSMutableURLRequest дважды:

  1. Вы передаете его URLSession «ы dataTaskWithRequest метода. Этот метод возвращает данные из URL-адреса вашего запроса в закрытии.
  2. Вы передаете его вашему методу UIWebViewloadRequest. Этот метод загружает контент по URL вашего запроса в ваш UIWebView (ваш mob_webview IBOutlet).

Для решения этой проблемы необходимо удалить код URLSession или код UIWebView. Удаление, которое вы хотите удалить, зависит от того, что вы хотите сделать с ответом с сервера - хотите ли вы его как данные или хотите загрузить его в webview? Если вы хотите, чтобы это были данные, вы должны использовать URLSession и удалить UIWebViewloadRequest. Если вы хотите загрузить его в webview, то вы должны использовать UIWebView и удалить любой код UISession.

Если это URLSession код, который нужно удалить, вы должны удалить все из следующих действий:

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
    data, response, error in 

    if error != nil { 
     print("error=\(error)") 
     return 
    } 

    print("response = \(response)") 

    let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
    print("responseString = \(responseString)") 
} 
task.resume() 
+0

Есть ли что-нибудь новое в вашем ответе, сравнивая с моим ответом :) – sschunara

3

task.resume() и mob_webview.loadRequest (запрос) будет выполняться запрос дважды.

Лучше удалить задачу.resume() перед loadRequest.