2

我将 JSON 请求发布到远程服务。一切都很好,服务很好,它对我有反应。但我没有从远程服务返回数据。如何通过 JQuery 通过 .post 从远程 json 服务获取数据?为什么这个例子返回数据——“null”:

<SCRIPT> 
$(function() {
    $('#zzz').click(function() {
        $('#lak').html('wait...');
        $.post(
  'http://127.0.0.1:3000/test',
  "{\"ipaddr\":\"192.168.132.58\"}",
  function(data) { alert(data); },
  "json"
        )
    });
});
</SCRIPT>

但是 TCP 嗅探器向我显示该服务返回了一些数据:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Type: application/json
X-Powered-By: Mojolicious (Perl)
Date: Thu, 02 Sep 2010 06:17:10 GMT
Content-Length: 37
Server: Mojolicious (Perl)

{"status":"OK","result":"successful"}

解决了:

<SCRIPT> 
$(function() {
    $('#clickme').click(function() {
 $.getJSON('http://domain.tld/test/?foo=bar&callback=?',
 function(jsonp) {
  $('#jsonp-example').html(jsonp.result);
 });
    });
});
</SCRIPT>

<div id="jsonp-example"><a id="clickme" href="javascript:void()">Click me</a></div>

Mojolicious JSONP 服务示例:

# /test/?foo=bar&callback=smth
get '/test' => sub { 
 my $self = shift;

 my $foo  = $self->param('foo') || '';
 my $callback = $self->param('callback') || 'jsonp';
...
 my $json = $self->render(
  json => {
   'status' => 'OK',
   'result' => 'successful'
  }, 
  partial => 1);

 $self->render(data => "$callback($json)", format => 'js');
} => 'test';
4

5 回答 5

4

您遇到了同源策略,该策略会阻止(除其他外)XmlHttpRequest 从远程域获取数据。您的 POST成功,但浏览器不允许您返回响应。

因为你要去一个远程域,你最好的办法是支持 JSONP,它以不同的方式工作,你不能 POST 所以它会得到一个 GET,但它会让你取回数据。JSONP 使用完全不同的方法来获取数据,基本上将回调定义为名称函数,然后在页面中创建<script>标签。远程服务器以 响应namedFunction({ ...JSON data }),您的页面运行...而不需要 XmlHttpRequest。

于 2010-09-02T12:00:16.357 回答
0

从 post 返回的数据被 jquery 用来确定请求是否成功。如果不是这种情况,则会引发异常。

于 2010-09-02T06:54:09.767 回答
0

您的客户端代码jsFiddle似乎没有任何问题,但是,您可能想要更改"{\"ipaddr\":\"192.168.132.58\"}"为,{ipaddr:"192.168.132.58"}因为这与发送带有名为ipaddrvalue的字段的表单相同192.168.132.58,您自己的选项是发送一个{"ipaddr":"192.168.132.58"}名为空值。

祝你好运。

于 2010-09-02T07:01:14.047 回答
0

尝试检查您的服务器端输出是否有随机空格,具体取决于可能会弄乱解析的浏览器。

于 2010-09-02T07:02:44.480 回答
0

“就它们的用途而言 - 唯一真正的技术差异(如果我错了,请更正这篇文章)是 GET 对查询字符串的限制要短得多。实际上,GET 用于获取某些东西来自服务器。GET 调用不应对服务器造成副作用。POST 是指您打算在服务器上发送某些内容并让它对其执行某些操作。” (jquery.post 和 jquery.get 的区别?

你试过 $.get() 吗?它应该更快,更习惯于从服务器返回数据......这是一些文档:http ://api.jquery.com/jQuery.get/

于 2010-09-02T07:06:18.777 回答