如何获得'getJSON'响应头

时间:2013-03-13 12:34:44

标签: javascript rest jquery

我需要使用$ .getJSON访问我从其他计算机(跨域请求)获取的响应消息的大小,虽然我可以在chrome控制台中看到请求和响应,但它不起作用。这是我的请求代码:

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

运行时我得到“未捕获的TypeError:对象#没有方法'getAllResponseHeader'”错误。当我使用

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

我得到“null”。

请考虑我使用的是跨域get。

3 个答案:

答案 0 :(得分:4)

不要使用JSONP,它实际上不是跨域请求(JSONP explained),它只适用于GET请求,而AJAX允许任何http方法。

尝试准备服务器以允许跨域请求(more details)并执行此操作:

$.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对象已设置,您可以访问它的标题。

答案 1 :(得分:0)

试试这个:

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 works locally, but not cross domain

getAllResponseHeadersgetResponseHeaderajax http://api.jquery.com/jQuery.ajax/

的文档

答案 2 :(得分:0)

我观察了很多次访问这个问题,并认为提供这个问题的解决方案是好的。不幸的是,所提供的解决方案都没有奏效,我做了两件事来解决这个问题。

  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