【问题标题】:JSON not loading with jQuery.ajax()JSON 未使用 jQuery.ajax() 加载
【发布时间】:2010-07-13 22:30:22
【问题描述】:

我正在使用返回 JSON 数据的 Web 服务。

test.com/incident.do?JSON&sysparm_action=getRecords

在浏览器中加载此 URL 会提示我打开 event.do,它在记事本中打开会显示有效的 JSON 数据。

然后,在同一个域的网页中,我使用这个:

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",
   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });

但是,使用此代码我没有收到任何 JSON,我只收到此响应

HTTP/1.1 200 OK
Date: Tue, 13 Jul 2010 22:28:09 GMT
Server: Apache-Coyote/1.1
Allow: GET, HEAD, POST, TRACE, OPTIONS
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/plain

我在这里做错了什么?

编辑:如果它对任何人有帮助,我有一个指向提供相同功能的提供商网站上的沙箱的链接...用户名/密码是 admin/admin

https://demo.service-now.com/incident.do?JSON&sysparm_action=getRecords

【问题讨论】:

  • 是那个 URL 的 Content-Type application/json
  • @meder 是的,我尝试设置 Content-Type,同样的问题。
  • 如果您没有收到来自网络服务的Content-Type: application/json 回复,那么即使它回复的是一个 json 对象,它也不会起作用。
  • 你得到的响应真的是一个有效的 JSON 吗?你确定吗?能否提供手动打开页面时得到的输出?
  • 手动加载时,我收到一个 event.do 文件。当以纯文本形式查看时,其有效 JSON;我可以提供输出,但它只是 .do 文件中的 JSON 行话。

标签: json jquery


【解决方案1】:

尝试设置contentType

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",

   contentType: "application/json",

   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });

更新

这是正确的调用方式。但是,如果您向域外的页面发出请求,它将无法正常工作。为此,您需要一个代理。 这是一个简单的 PHP 代理:

<?php
    /* Set the headers for application/json , xml, or whatever */
    echo @file_get_contents(urldecode($_GET['url']));
?>

那么你的请求就必须是这个页面,像这样:

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "myproxy.php?url=" + escape("https://test.com/incident.do?JSON&sysparm_action=getRecords"),

   contentType: "application/json",

   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });

【讨论】:

  • 感谢您的帮助 :) 问题是这样的:我在与服务器相同的域上进行这些调用,但我的计算机用于连接到域的代理仅为 IE 设置!它在 Firefox 中不起作用,但在 IE 中尝试代码时它运行良好,所以它最终成为代理问题。
【解决方案2】:

尝试删除"type": "GET"。 jQuery Ajax 请求默认是 GET。

也许您遇到了浏览器 XSS 限制。网页是否也通过 HTTPS 提供?如果包含 ajax 调用的页面是 HTTP 并且 AJAX 端点是 HTTPS,它将违反同源策略。更多讨论here

来自 jQuery 文档:

由于浏览器安全限制, 大多数“Ajax”请求都受到 同源政策;请求 无法成功检索数据 来自不同的域、子域或 协议。

根据wikipediahttp://test.comhttps://test.com 是不同的来源,因此违反了同源政策。尝试将您的页面设置为 HTTPS。

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",
   dataType: 'json',
   success: function(a,b,c) {
     alert(a);
   }
 });

【讨论】:

  • 谢谢,但删除 "type": "GET" 后我仍然遇到同样的问题
猜你喜欢
  • 2011-02-19
  • 2012-03-17
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多