2

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';
4

5 に答える 5

4

XmlHttpRequestがリモート ドメインからデータを取得することを (とりわけ) 防止する、同一生成元ポリシーに遭遇しています。POST成功しますが、ブラウザーは応答を返すことを許可しません。

リモートドメインに行くので、最善の方法はJSONP をサポートすることです.JSONPは別の方法で動作します.POSTできないため、GETを取得できますが、データを取り戻すことができます. JSONP は、データを取得するためのまったく異なる方法を使用します。基本的に、コールバックを名前関数として定義<script>してから、ページにタグを作成します。リモート サーバーは で応答しnamedFunction({ ...JSON data })、ページが実行されます... XmlHttpRequest は必要ありません。

于 2010-09-02T12:00:16.357 に答える
0

投稿から返されたデータは、リクエストが成功したかどうかを判断するために jquery によって使用されます。そうでない場合は、例外が発生します。

于 2010-09-02T06:54:09.767 に答える
0

クライアント側コードjsFiddleに問題があるようには見えませんが、 valueという名前のフィールドを持つフォームを送信するのと同じであるため、おそらく変更"{\"ipaddr\":\"192.168.132.58\"}"する必要があります。独自のオプションは、withという名前のフィールドを送信していました。空の値。{ipaddr:"192.168.132.58"}ipaddr192.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 に答える