为什么JQuery的.post没有返回数据?

时间:2010-09-02 06:46:05

标签: jquery json mojo mojolicious

我将JSON请求发布到远程服务。一切都很好,服务很好,它回应我。但我没有从远程服务返回的数据。如何通过.post从JQuery获取远程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';

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

jquery使用帖子返回的数据来确定请求是否成功。如果情况并非如此,则会引发异常。

答案 2 :(得分:0)

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

祝你好运。

答案 3 :(得分:0)

尝试并检查服务器端输出是否有随机空白,具体取决于可能会破坏解析的浏览器。

答案 4 :(得分:0)

“就他们的意图而言 - 唯一真正的技术差异(如果我错了请更正这篇文章)是GET对查询字符串的限制要短得多。实际上,GET意味着从服务器获取内容时.GET调用不应该对服务器造成副作用.POST是指你打算在服务器上发送内容并让它对它做一些事情。“ (Difference between jquery.post and jquery.get?

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