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 no method 'getAllResponseHeader'”错误。当我使用

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

我得到“空”。

请考虑我正在使用跨域获取。

4

3 回答 3

4

不要使用 JSONP,它不是真正的跨域请求(JSONP 解释),它是一种仅适用于 GET 请求的 hack,而 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 在本地工作,但不能跨域

文档和http://api.jquery.com/jQuery.ajax/getAllResponseHeaders _getResponseHeaderajax

于 2013-03-13T12:43:02.247 回答
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
    
于 2014-10-29T09:03:42.977 回答