【问题标题】:Why JQuery's .post returns no data?为什么 JQuery 的 .post 不返回数据?
【发布时间】:2011-04-07 03:59:16
【问题描述】:

我将 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';

【问题讨论】:

    标签: jquery json mojo mojolicious


    【解决方案1】:

    您遇到了same-origin policy,它会阻止(除其他外)XmlHttpRequest 从远程域获取数据。您的 POST 成功,但浏览器不允许您返回响应。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        祝你好运。

        【讨论】:

        • 我需要发送 json 请求。如果我按照你写的那样做,我会收到这样的帖子请求:ipaddr=192.168.132.58 而不是 json 格式(我真正需要的):{"ipaddr":"192.168.132.58"}
        【解决方案4】:

        尝试检查服务器端输出中是否存在随机空格,具体取决于可能会导致解析混乱的浏览器。

        【讨论】:

          【解决方案5】:

          “就它们的含义而言——唯一真正的技术区别(如果我错了,请更正这篇文章)是 GET 对查询字符串的限制要短得多。实际上,GET 用于“ (Difference between jquery.post and jquery.get?)

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

          【讨论】:

          • 不要使用 json 格式,即我不能以 json 格式发布。
          猜你喜欢
          • 2013-07-24
          • 1970-01-01
          • 2012-01-03
          • 2016-01-21
          • 2011-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多