【问题标题】:Javascript Widget JSONPJavascript 小部件 JSONP
【发布时间】:2011-05-10 19:40:17
【问题描述】:

我希望创建一个类似于 Get Satisfaction (http://getsatisfaction.com/) 创建的小部件。您可以通过点击页面左侧的“反馈”来查看他们的小部件。

我们希望通过将一些 JS 复制到他们的网页而不是其他任何东西来设置用户。

在最简单的用法中,用户会打开小部件并输入数据。这些数据将被发送到我们的服务器(跨域)进行处理,并将响应发送回用户。

谁能解释一下如何做到这一点?

我了解到我可以使用 jQuery 发送 JSONP 请求并处理响应回调——这可以用注入的 javascript 封装吗?

非常欢迎所有帮助。

问候

【问题讨论】:

    标签: javascript jquery widget jsonp


    【解决方案1】:

    你是对的,JSONP 是正确的方法,应该适用于你的情况。 JSONP基本上是注入一个<script>标签来模拟一个GET响应,脚本的内容是一个回调方法,里面有JSON对象。何况名字,JSON + Padding。

    注意:JSONP 显然不支持 POST 回调或自定义标头,因为它只是一个 <script> 标记,准备就绪后会被注入和删除。

    【讨论】:

    • 感谢您的回复 CharlesLeaf。我尝试像这个例子link 那样实现JSONP 的原始版本。在我尝试将其打包到外部站点上的 JS 文件中之前,这一直很好。如果我不能做回调,那么 JSONP 似乎不是完成我的目标的最佳方法。
    • 你有你在某处尝试过的样本吗?也许你只是在某个地方犯了一个小错误,因为 JSONP 的一大优势是它可以跨域工作——在这种情况下非常理想。
    • 在客户端的 html 页面中,我调用了托管在我们服务器上的 JS 文件 (absolutekack.com/server.js)。客户页面的正文有<input type="button" id="useJSONP" value="Use JSONP"></input><br /><br /> <span id="jsonpResult"></span>(这个可以稍后注入)。 PHP 文件执行以下操作:if(isset($_GET['name']) && isset($_GET['callback'])) { $obj->name = $_GET['name']; $obj->message = "Hello " . $obj->name; echo $_GET['callback']. '(' . json_encode($obj) . ');'; }
    • 嗯,它确实执行 JSONP“请求”,但是它请求的页面 http://absolutekack.com/server.php?callback=jsonpCallback&name=Chad 返回一个空文档。另外,请注意,由于它基本上返回一个 JavaScript 文件,因此您的 PHP 应该返回一个 @987654328 @标头也是如此。可能是因为$obj 未定义?
    • CharlesLeaf- 我没有给出 server.php 的完整实现。 $obj 是在代码中定义的——但我没有考虑 Content-Type——谢谢。
    猜你喜欢
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多