“dataTaskWithRequest”在仅需要一个请求时请求NSMutableRequest两次
我有一个安全的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")
}
在服务器中,如果用户键入的M-PIN 3次错误,他被阻止。这是根据服务器中错误的MPIN命中次数完成的。出于某种原因,我的web视图提出请求两次(即调用加载请求两次的链接),即使它只加载一次。假设客户输入错误的MPIN并加载web视图,链接被调用两次,他失去了两次机会输入正确的MPIN。我们的APP的Android版本与类似的请求正常工作。它的任何原因?
在阅读完您的问题后,我浏览了苹果的参考文档。它说,然后webViewDidFinishLoad
在webview中加载每个帧后调用。 Here is document
webViewDidFinishLoad:在web视图完成加载帧后发送。
请向服务器确认一次运行的请求数。它是2或1。还想知道在您的代码中执行了多少次打印语句print("response = \(response)")
。因为我没有主持这个声明。
在你的问题中发现你调用NSURLSession的dataTaskWithRequest,并在Web视图中加载请求。这可能也是两次调用同一个事物的问题。如果你想在webview中打开请求,请不要使用NSURLSession任务请求。 运行它通过评论task.resume()
。
我会尽快检查。 btb打印语句只会被执行一次,而不管我在服务器中是否命中......在发布此问题之前,我已经检查过它。 –
2请求的主要原因是在Web视图中调用datataskrequest和加载请求。如果你评论'task.resume',你的问题将得到解决 – sschunara
我会接受这个..你有我的赏金.. :) –
您要求您NSMutableURLRequest
两次:
- 你把它传递给一个
URLSession
的dataTaskWithRequest方法。此方法在封闭中从请求中的URL返回数据。 - 您将其传递给您的
UIWebView
的loadRequest方法。此方法将您的请求的URL内容加载到您的UIWebView
(您的mob_webview
IBOutlet)中。
要解决此问题,您需要删除URLSession
代码或UIWebView
代码。你删除哪个取决于你想要做什么与服务器的响应 - 你想它作为数据,或者你想要加载它在web视图?如果你想要它作为数据,你应该使用URLSession
并删除UIWebView
loadRequest
。如果你想在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()
有什么新的答案比我的回答:) – sschunara
task.resume()和mob_webview.loadRequest(请求)将运行要求的两倍。
你最好删除任务。resume()在loadRequest之前。
发布您的代码 - 请求和完成处理程序。一条线是不够的。 – Roee84
你有一个webview和正在做'NSURLSession'请求?这两者如何相关?也许webview正在发出一个请求,然后你用'NSURLSession'发出另一个请求。 –
你可以请你清理你的代码吗?我们看到发生的事情真的不够好。 –