JSON没有加载jQuery.ajax()

时间:2010-07-13 22:30:23

标签: json jquery

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

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

在浏览器中加载此URL会提示我打开incident.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

2 个答案:

答案 0 :(得分:0)

尝试设置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);
   }
 });

答案 1 :(得分:0)

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

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

来自jQuery doco:

  

由于浏览器安全限制,   大多数“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);
   }
 });