Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery、ajax和jsonp的问题_Javascript_Jquery_Ajax_Json_Jsonp - Fatal编程技术网

Javascript jQuery、ajax和jsonp的问题

Javascript jQuery、ajax和jsonp的问题,javascript,jquery,ajax,json,jsonp,Javascript,Jquery,Ajax,Json,Jsonp,我正在使用jsonp和ajax访问另一台服务器上的web服务。以下是jQuery: $.ajax({ type: 'GET', url: wsurl + 'callback=?', dataType: 'jsonp', crossDomain: true, error: function(data) { console.log('error', data); }, success: function(data) { console.log('succe

我正在使用jsonp和ajax访问另一台服务器上的web服务。以下是jQuery:

$.ajax({
  type: 'GET',
  url: wsurl + 'callback=?',
  dataType: 'jsonp',
  crossDomain: true,
  error: function(data) {
    console.log('error', data);
  },
  success: function(data) {
    console.log('success', data);
  },
  complete: function() {
    console.log('done');
  }
});
问题是正在调用错误回调。它为我提供了非常有用的信息:

{
  readyState: 4,
  status: 200,
  statusText: "success"
}
下面是我调用的json文件:

{
  "id": 0,
  "room_number": "0",
  "first_name": "Admin",
  "last_name": "Istrator",
  "password": "",
  "salutation": "Mr.",
  "telephone": "",
  "email": "",
  "description": "admin",
  "checkin_date": 915797106000,
  "checkout_date": 4071557106000,
  "last_login_date": 947333106000,
  "active_status": true,
  "created_date": 915797106000,
  "created_by": 0,
  "reference_id": ""
}
我首先尝试使用getJSON jQuery方法,得到了相同的结果。我想我会尝试基本的ajax方法,因为它有更多的控制,但是正如你所看到的,没有运气。注意到我做错了什么吗?你知道为什么它会抛出一个错误并为statusText属性提供一个成功的值吗

编辑 好的,我在ajax调用中添加了一些选项,并从url中删除了回调参数。下面是新的ajax调用:

  $.ajax({
    type: 'GET',
    url: wsurl,
    dataType: 'jsonp',
    crossDomain: true,
    error: function(xhr, textStatus, errorThrown) {
      console.log('textStatus: ' + textStatus);
    },
    success: function(data) {
      console.log('success');
      console.log(data);
    }
  });
我得到了一个新的错误,我想这是好的,但仍然不起作用。不同之处在于textStatus现在是“parsererror”。控制台还在json文件的第一行抛出语法错误:

Uncaught SyntaxError: Unexpected token :

想法?

不确定这是否是问题所在,但您的url不正确。根据jQuery文档,它应该自动附加?callback=?给你:


好吧,有几件事突然向我袭来:

$.ajax({
  type: 'GET',
  #You do not need to append the callback as you have jsonp configured it will  do it    
  #automatically append the callback=<auto generated name>
  url: wsurl, 
  dataType: 'jsonp',
  crossDomain: true,
  error: function(data) {
    console.log('error', data);
  },
  success: function(data) {
    console.log('success', data);
  },
  complete: function() {
    console.log('done');
  }
});
$.ajax({
键入:“GET”,
#您不需要追加回调,因为您已经配置了jsonp,它将完成此操作
#自动追加回调=
url:wsurl,
数据类型:“jsonp”,
跨域:是的,
错误:函数(数据){
console.log('错误',数据);
},
成功:功能(数据){
console.log('success',数据);
},
完成:函数(){
console.log('done');
}
});
此外,您的返回似乎没有包装在jsonp工作所需的函数中

<auto generated name>({ json object })
({json object})

回调函数将由jquery自动命名。因此,您需要一个服务,该服务将接收回调参数并返回一个带填充的json对象。

从URL中删除回调,并尝试用类似的内容包装json(php示例,$\u GET['callback']由jQuery自动设置):


我觉得一切都很好,如果这能让我感到安慰的话。。。您是否可以在JSFIDLE上设置一个示例?服务器是否配置为处理JSONP类型的请求?应该是。至少,服务器端的家伙说是这样。我创建了一个示例说明,使用不同的错误函数,您可能需要将空数据作为`数据:{}传递,并在其中添加一个contentType:以及修复其他人注意到的url问题。如果我去掉最后的问号,我遇到了access control allow origin协议问题。如果您只是对url执行此操作--url:wsurl如果不是那样,请尝试在开头添加问号,就像这样--url:wsurl+?callback=?确实如此,您是对的。我认为它需要它,因为$.getJSON需要它来知道我想要jsonp。但结果没有变化。您确定服务器希望调用回调参数吗?它是像jsonp_回调之类的东西吗?在这种情况下,您需要将jsonp属性设置为他们期望的回调参数的名称:jsonp:“callback_name”不能,我没有访问json的权限。这将是一个问题。返回的jsonp格式不正确。它必须包装成jsonp,因为jquery需要它。查看本教程:我从url中删除了回调,但我不确定在函数中包装返回是什么意思。你是说除了错误、成功和完全回调之外的函数吗?jsonp的要点是不允许从跨域返回json对象,但当包装在函数中时,它是允许的。先生,您应该多读一些,非常正确,谢谢您提供的信息。现在工作出色。:)很高兴这有帮助。当我第一次开始使用jquery时,我也陷入了这个困境。
$_GET['callback'] . '({
  "id": 0,
  "room_number": "0",
  "first_name": "Admin",
  "last_name": "Istrator",
  "password": "",
  "salutation": "Mr.",
  "telephone": "",
  "email": "",
  "description": "admin",
  "checkin_date": 915797106000,
  "checkout_date": 4071557106000,
  "last_login_date": 947333106000,
  "active_status": true,
  "created_date": 915797106000,
  "created_by": 0,
  "reference_id": ""
})'