Swift - 使用NSURL进行数据的提交和获取(POST与GET)

使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交。 其数据请求的方式既可能是POST也可能是GET。同不管是POST还是GET又可以分为同步请求和异步请求。 下面通过四个例子来进行演示。

1,使用POST方式提交数据(用户id和分数)

(1)同步请求


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

//保存分数

func saveScore(score:Int, userid:String)

{

    let urlString:String = "http://hangge.com/"

    var url:NSURL!

    url = NSURL(string:urlString)

    var request = NSMutableURLRequest(URL:url)

    var body = "score=\(score)&user=\(userid)"

    //编码POST数据

    var postData = body.dataUsingEncoding(NSUTF8StringEncoding)

    //保用 POST 提交

    request.HTTPMethod = "POST"

    request.HTTPBody = postData

    

    //响应对象

    var response:NSURLResponse?

    //错误对象

    var error:NSError?

    

    //发出请求

    var received:NSData? = NSURLConnection.sendSynchronousRequest(request,

        returningResponse: &response, error: &error)

    

    if(error != nil){

        println(error?.code)

        println(error?.description)

    }else{

        var datastring = NSString(data:received!, encoding: NSUTF8StringEncoding)

        println(datastring)

    }

}

(2)异步请求


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

import UIKit

class ScoreController:NSObject, NSURLConnectionDataDelegate

{

    //保存分数

    func saveScore(score:Int, userid:String)

    {

        let urlString:String = "http://hangge.com/savescore.php"

        var url:NSURL!

        url = NSURL(string:urlString)

        var request = NSMutableURLRequest(URL:url)

        var body = "score=\(score)&user=\(userid)"

        //编码POST数据

        var postData = body.dataUsingEncoding(NSASCIIStringEncoding)

        //保用 POST 提交

        request.HTTPMethod = "POST"

        request.HTTPBody = postData

        var conn:NSURLConnection!

        conn = NSURLConnection(request: request,delegate: self)

        conn.start()

        println(conn)

    }

       

    func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!)

    {

        println("请求成功!");

        println(response)

    }

    

    func connection(connection: NSURLConnection!, didReceiveData data: NSData!)

    {

        println("请求成功1!");

        var datastring = NSString(data:data, encoding: NSUTF8StringEncoding)

        println(datastring)

    }

    

    func connectionDidFinishLoading(connection: NSURLConnection!)

    {

        println("请求成功2!");

    }

}

2,使用GET方式获取数据(用户id对应的分数)

(1)同步请求


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

//获取分数

func getScore(user:String){

    

    let urlString:String="http://hangge.com/getscore.php?user=\(user)"

    var url:NSURL!

    url = NSURL(string:urlString)

    var request = NSMutableURLRequest(URL:url)

    request.HTTPMethod = "GET"

    

    //响应对象

    var response:NSURLResponse?

    //错误对象

    var error:NSError?

    

    //发出请求

    var received:NSData? = NSURLConnection.sendSynchronousRequest(request,

        returningResponse: &response, error: &error)

    

    if(error != nil){

        println(error?.code)

        println(error?.description)

    }else{

        var datastring = NSString(data:received!, encoding: NSUTF8StringEncoding)

        println(datastring)

    }

}

(2)异步请求


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

import UIKit

class ScoreController:NSObject, NSURLConnectionDataDelegate

{   

    //获取分数

    func getScore(user:String)

    {

        let urlString:String="http://hangge.com/getscore.php?user=\(user)"

        var url:NSURL!

        url = NSURL(string:urlString)

        var request = NSMutableURLRequest(URL:url)

        

        var body = "user=\(user)"

        request.HTTPMethod = "GET"

        var conn:NSURLConnection!

        conn = NSURLConnection(request: request,delegate: self)

        conn.start()

        println(conn)

    }

    

    func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!)

    {

        println("请求成功!");

        println(response)

    }

    

    func connection(connection: NSURLConnection!, didReceiveData data: NSData!)

    {

        println("请求成功1!");

        var datastring = NSString(data:data, encoding: NSUTF8StringEncoding)

        println(datastring)

        //解析 JSON 数据

        var json : AnyObject! = NSJSONSerialization.JSONObjectWithData(data,

            options:NSJSONReadingOptions.AllowFragments,error:nil)

        

        var score = json.objectForKey("score") as Int

        println(score)

    }

    

    func connectionDidFinishLoading(connection: NSURLConnection!)

    {

        println("请求成功2!");

    }

}

时间: 2024-11-07 10:11:58

Swift - 使用NSURL进行数据的提交和获取(POST与GET)的相关文章

iOS开发——网络Swift篇&NSURL进行数据请求(POST与GET)

NSURL进行数据请求(POST与GET) 使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交. 其数据请求的方式既可能是POST也可能是GET.同不管是POST还是GET又可以分为同步请求和异步请求. 下面通过四个例子来进行演示. 1,使用POST方式提交数据(用户id和分数) (1)同步请求 1 //保存分数 2 func saveScore(score:Int, userid:String) 3 { 4 let urlString:String = "http://han

TinyMCE 提交 AjaxForm 获取不到数据的问题

在没有使用AjaxForm前,我做的一个小小的评论提交的Web form,评论内容使用了TinyMCE做文本编辑.为了增加一点点的用户体验,就顺手拿AjaxForm来实现Ajax提交.可是发现出现了一个意外的事情.就是每次提交,第一次提交时,AjaxForm会无法获得当前编辑的评论内容,即TextArea里面的内容,要再点击一次提交,才能将TextArea的内容提交上去. 关键是TinyMCE上的内容没有在提交前更新到TextArea中.于是想看看AjaxForm是否有在提交前的事件绑定,发现在

loadrunner中对服务器返回的数据选择性提交

在跟进项目的过程中,才体会到自己之前闷头看书再写小小的测试程序验证的学习方式很没有效率,知道动态关联,却也只是会参数化式的动态关联,这种关联是我们预先知道要提交的数据而进行的关联:更高一级的可能就是使用loadrunner自带的自动关联,对jsessionid和DSId进行关联,除此之外一无所知. 在项目中碰到的情况是:对输入框A进行参数化,假定当前参数数据为a1,参数化之后点击“查询”按钮,Server 返回a1的数据,选中a1进行提交.在这个过程中,根据参数不同Server返回的数据不同,且

ASP.NET MVC 入门7、Hellper与数据的提交与绑定

View视图 我们可以手写HTML代码, 也可以采用基类提供的Helper类完成HTM代码. 示例: <%=Html.ActionLink("首页","index","Home")%> 生成的HTML代码就是:<a href="/Home/Index">首页</a> 生成的HTML代码取决于Global.asax中配置的Route顺序. 数据显示 数据绑定 <p> <lab

客户端表单提交数据方式与服务器获取数据

表单提交数据的两种方式 表单form的提交有两种方式,一种是get的方法,通过超级链接后面的参数提交过来,一种是post ,通过Form表单提交过来. post方式: <form id="form1" name="form1" method="post" action="login.aspx"> <table width="501" border="0" align=&

js表单动态添加数据并提交

情景1:已经存在form对象了,动态为form增加对象并提交 function formAppendSubmit(){ var myform=$('#newArticleForm'); //得到form对象 var tmpInput=$("<input type='text' name='blogArticleForm.articleContent'/>"); tmpInput.attr("value", myUeditor.window.getCont

element ui 表格提交时获取所有选中的checkbox的数据

<el-table ref="multipleTable" :data="appList" @selection-change="changeFun"> <el-table-column type="selection" width="55" class="selection" prop='uuid' :selectable='checkboxInit' @select

SoapUI对于Json数据进行属性值获取与传递

SoapUI的Property Transfer功能可以很好地对接口请求返回的数据进行参数属性获取与传递,但对于Json数据,SoapUI会把数据格式先转换成XML格式,但实际情况却是,转换后的XML格式往往根本没法用Xpath形式获取到指定的数据了.因此只能用Script脚本形式了. {"addUsersToDirectoryResponse":{"addUserToDirectoryResponse":[{"ack":"Succes

ajax提交,获取后台数据

<body> <div class=" row" ng-app="myApp" ng-controller="myCtrl"> <ul class="content"> <li class="form-group"> <span class="sign">sign up</span> </li> <