【问题标题】:Trying to access returned JSONP data via jQuery.ajax()尝试通过 jQuery.ajax() 访问返回的 JSONP 数据
【发布时间】:2013-12-20 18:53:30
【问题描述】:

我返回的 JSONP 数据显示在控制台中,格式正确。

group({
  "blah": "blah",
  "blahblah": "blahblah",
  "blahblahblah": "blahblahblah"
}); 

这是我的 ajax 调用。

$.ajax({
  type: 'GET',
  url: 'test.php',
  dataType: 'jsonp', 
  cache: false,
  jsonpCallback: 'group',
  statusCode: {
    404: function() {
      alert( "page not found" );
    }
  },
  success: function(group){
    console.log(group);
    $('#theTest').append(group.name);
  },
  error: function(response1, response2, response3){
    console.log("Fail!");
    console.log(response1);
    console.log(response2);
    console.log(response3);
  }
});

JSON 用“组”包装。但是,当我尝试访问该数据时,我无法这样做。

  • 在控制台中有值的 group.name 在我将其放在网站上时不会显示。
  • group[0] 返回 g
  • group[1] 返回 r
  • group[2] 返回 o

我很困惑为什么它会以这种方式退回。有人能指出我正确的方向吗?

【问题讨论】:

  • 你为什么要设置jsonpCallback: 'group'
  • 这是个好问题。我不知道。我之前在数据中设置了回调:“组”,但移动了它。我的 PHP 文件正在寻找回调。
  • 您无需手动设置回调或其名称。当您执行dataType: 'jsonp' 时,jQuery 会在您的 URL 中添加一个 GET 参数,并使用它生成的回调名称:$_GET['callback']。当您的 PHP 脚本返回时,您应该使用它:echo $_GET['callback'].'('.json_encode($data).')';.

标签: jquery ajax json jsonp


【解决方案1】:

你的ajax请求不正确,应该是这样的

$.ajax({
  type: 'GET',
  url: 'test.php',
  dataType: 'jsonp', 
  cache: false,
  jsonpCallback: 'group',
  statusCode: {
    404: function() {
      alert( "page not found" );
    }
  },
  success: function(group){
    console.log(group);
    $('#theTest').append(group.name);
  },
});

dataTypecachecallback 不得作为数据字段传递,数据类型应为 jsonp

【讨论】:

  • 进行此更改后,运行时出现错误。具体来说,我得到:parsererror 和 SyntaxError {}
  • response2 和 response3
【解决方案2】:

错误出现在您的服务器端响应中。 JSONP 的工作方式是,您指定一个已知的回调参数,该参数将传递给 GET 请求。在服务器端,您需要提取该参数以获取 JSON 填充的封装方法调用。

在您使用 jsonpCallback: 'group' 的示例中,您的服务器端需要:

    $methodName = $_GET['group']
    $response = $methodName . '(' . <YOUR JSON RESPONSE> . ');'
    echo $response

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 2011-01-25
    • 2019-06-01
    • 2012-02-15
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    相关资源
    最近更新 更多