我需要使用$ .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。
答案 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
getAllResponseHeaders
,getResponseHeader
和ajax
http://api.jquery.com/jQuery.ajax/
答案 2 :(得分:0)
我观察了很多次访问这个问题,并认为提供这个问题的解决方案是好的。不幸的是,所提供的解决方案都没有奏效,我做了两件事来解决这个问题。
我确认我的服务器端<?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");
我稍微改变了拨打电话的方式,如下所示,它始终适用于我。
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