####前端直接使用jquery访问restify建立的rest服务 涉及到跨域了,应该使用jsonp访问. 那这样rest服务就必须修改成符合jsonp格式的格式 callback({xx:xx}) 吗??
你这耦合的也太深了。
作为服务器,还管你跨不跨域。 只要你够了权限, 发给你http消息文本就是服务器唯一要做的事情。
如果你要json数据,让服务器把json格式化成字符串放进http消息流,客户端取出来解析就行了。
没接触过rest的服务,之前一直用.net的webservice 如果不跨域,直接返回json就可以了; 但是要跨域 使用jsonp 就不能直接返回json, 是要写成 "callback(json字符串)" 格式.
@jeffZhong ?name=value&callback(data) 这个只是浏览器提供的程序格式而已, 内部实际上跟ajax差不多, ie9以上的ajax也是支持跨域的。 至于rest服务, 只是http请求资源的一套区别旧规则的方式而已。 http://host:port/123456.html?user=lili 这是以前常用的方式, rest提倡http://host:port/lili/1223456.html这样的方式, url定位资源, 而不是用querystring (?后边那一段)。
@jeffZhong rest服务只是一个服务器应用程序,编写的规范而已。 nodejs中就是路由的url判断方式: 比如你可以用/index.html?user=lili来设置路由, rest提倡用/lili/index.html这样的方式设置路由. http原理上只有请求和响应, 跨域其实是浏览器的自保护机制。用nodejs的request也可以创建跨域请求。request()可不管客户端是来自哪里,ta只做一件事:向服务器发送请求。 而使用浏览器的ajax或者jsonp的时候,浏览器内部代码会运行些保护代码。
@jeffZhong <script src="http://host:port/path?...callback"></script> 这个是jsonp的“未封装”方式。使用script标签加载http://host:port/path的内容,然后把获取的http服务器响应内容,使用callback回调函数运行。
@jeffZhong 浏览器跨域, jsonp是比较好用的。 另外ajax也是可以跨域的, 只要url是http绝对路径。 但是ie9以下版本的ie浏览器不支持ajax跨域, firefox chrome opera的最新版本都支持ajax跨域。