8

$ .getJSONを使用して、別のマシン(クロスドメインリクエスト)から取得しているレスポンスメッセージのサイズにアクセスする必要があります。Chromeコンソールでリクエストとレスポンスを確認できますが、機能しません。これが私のリクエストコードです:

xhr=$.getJSON('http://192.168.1.102/server/server.php?callback=?',   
{data:array}, function(res){
alert(xhr.getAllResponseHeader());
}, 
type='json'); 

実行すると、「Uncaught TypeError:Object#has nomethod'getAllResponseHeader'」エラーが発生します。使うとき

alert(xhr.getResponseHeader("Content-Length"));

「null」になります。

クロスドメインgetを使用していることを考慮してください。

4

3 に答える 3

4

JSONPは使用しないでください。実際にはクロスドメインリクエストではありません(JSONPで説明されています)。これはGETリクエストでのみ機能するハックですが、AJAXでは任意のhttpメソッドが許可されます。

クロスドメインリクエスト(詳細)を許可するようにサーバーを準備し、これを実行してみてください。

$.ajax({
type: "get",
url: "http://192.168.1.102/server/server.php",
crossDomain: true,
cache: false,
dataType: "json",
contentType: "application/json; charset=UTF-8",
data: array,
success: function(data, textStatus, xhr) {
    console.log(data);
    console.log(xhr.getResponseHeader("Content-Length"));
},
error: function (xhr, textStatus, errorThrown) {
    console.log(errorThrown);
}});

これにより、xhrオブジェクトが設定され、そのヘッダーにアクセスできます。

于 2013-03-13T14:12:20.953 に答える
1

これを試して:

xhr=$.getJSON('http://192.168.1.102/server/server.php?callback=?',   
  {data:array}, function(res,status,xhr){
    alert(xhr.getAllResponseHeaders()); 
    // not getAllResponseHeader its only getResponseHeader
});

cross domain使用するために

$.ajax({
  url: 'http://192.168.1.102/server/server.php?callback=?',
  dataType: 'json',
  jsonpCallback: 'MyJSONPCallback', // specify the callback name if you're hard-coding it
  success: function(data){
    // we make a successful JSONP call!
  }
});

このjQuery getJSONを参照してくださいローカルでは機能しますが、クロスドメインでは機能しません

getAllResponseHeadersgetResponseHeaderおよびhttp://api.jquery.com/jQuery.ajax/のドキュメントajax

于 2013-03-13T12:43:02.247 に答える
0

この質問への多くの訪問を観察し、この問題の解決策を提供するのは良いことだと思いました. 残念ながら、提供された解決策はどれも機能せず、問題を解決するために 2 つのことを行いました。

  1. <?phpサーバー側のタグの直後に次のコードがあることを確認しました。

    header("Content-Type: application/*");
    header("Access-Control-Allow-Origin :*");
    header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
    header("Access-Control-Max-Age: 1000");
    header("Access-Control-Allow-Headers: Content-Type");
    
  2. 次のように呼び出しの方法を少し変更しましたが、常に機能します。

    function name(){
        $.ajax({
            type: 'POST',
            crossDomain: true,
            data: {
                data1: data
            },
            dataType: 'text',
            error: function (res, textStatus, errorThrown) {
                alert('Connection Terminated. Please try again');
            },
            success: function(res, textStatus, jqXHR) {
            //Process the result in res;
            },
        });//ajax
    }//function name
    
于 2014-10-29T09:03:42.977 に答える