datasnap ajax jsonp,有没有办法在Delphi DataSnap REST服务器上使用JSONP?

似乎没有办法使用DataSnap来实现带有Padding的JSONP(JSON)解决方案,但是我想在这里抛出这个问题以防有人解决了这个问题。有没有办法在Delphi DataSnap REST服务器上使用JSONP?

背景:JSONP是一种利用HTML脚本元素的跨站点引用功能来克服XmlHttpRequest类的相同源策略的机制。使用XmlHttpRequest,您只能从HTML文档提供的相同域中获取数据(JSON对象)。但是如果你想从多个站点检索数据并将数据绑定到浏览器中的控件呢?

使用JSONP,脚本元素的src属性不引用JavaScript文件,而是引用Web方法(可驻留在检索到HTML的不同域上的Web方法)。这个Web方法返回JavaScript。

脚本标签假定返回的数据是一个JavaScript文件并正常执行。但是,Web方法实际返回的是以文字JSON对象作为参数的函数调用。假定被调用的函数是被定义的,该函数执行并且可以在JSON对象上运行。例如,该函数可以从JSON对象提取数据并将该数据绑定到当前文档。

JSONP的优缺点已被广泛讨论(它代表了一个非常严重的安全问题),所以在这里没有必要重复说明。

我感兴趣的是如果有人已经找到了如何在Delphi的DataSnap REST服务器上使用JSONP。就像我看到的那样,问题就在这里。一个典型的JSONP使用可能包括脚本标记看起来是这样的:

的的GetData Web方法将返回调用类似如下:

workit({"id": "Delphi Pro", "price":999});

和workit功能可能看起来像这样的:

function workit(obj) {

$("#namediv").val(obj.id);

$("#pricediv").val(obj.price);

}

问题是的DataSnap似乎并不能够返回一个简单的字符串像 的

workit({"id": "Delphi Pro", "price":999});

相反,它被包裹着,像下面这样:

{"result":["workit({\"id\":\"Delphi Pro\",\"price\":999});"]}

很显然,这是不可执行的JavaScript。

任何想法?

+2

这个问题可以降低到“ DataSnap提供了一个过滤器/钩子/事件,它允许在发送给客户端之前修改生成的JSON响应“? –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值