在ajax调用中没有得到json响应

时间:2014-04-11 12:45:08

标签: javascript jquery ajax

<html>
  <head>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  <script>
    function fn(){
      $.ajax({
        type:'GET',
        url: "http://www.enquiry.indianrail.gov.in/ntes/NTES",
        data: "action=getTrainForDate&trainNo=16649&trainStartDate=11/04/2014&t=1397216860215&18q1xp3lm5=1ptur1oxbz1i5vwea0u61397214250740",
        dataType: "json",
        success:function(data){
          alert(data);
        }
      });
    }   
</script>
  </head>
  <body>
    <a href="#" onclick="fn();"> hi </a>
  </body>
</html>

2 个答案:

答案 0 :(得分:4)

您请求的网址返回(function(){location.reload();})(),这不是JSON,JSONP或任何形式的有用数据。

答案 1 :(得分:-1)

只是为了更新,您需要使用jsonp代替json,否则您将收到CORS错误。更新的代码是

$.ajax({
    type:'GET',
    url: "http://www.enquiry.indianrail.gov.in/ntes/NTES",
    data: {"action" : "getTrainForDate", "trainNo" : "16649", "trainStartDate" : "11/04/2014", "t" : "1397216860215", "18q1xp3lm5" : "1ptur1oxbz1i5vwea0u61397214250740"},
    dataType: "jsonp",
    success:function(data){
        alert(data);
    }
});

请注意,以字符串形式发送数据的方式并没有错,我只是喜欢对象方式。 现在,当您拨打电话时,您最终会收到此消息(而不是数据)

Resource interpreted as Script but transferred with MIME type text/plain: "http://www.enquiry.indianrail.gov.in/ntes/NTES?callback=jQuery2119973546624…1397216860215&18q1xp3lm5=1ptur1oxbz1i5vwea0u61397214250740&_=1397220999300".

这就是问题所在。如果您点击形成的URL,它将为您提供JavaScript函数作为响应,而不是数据。这就是你得到的回应

(function(){location.reload();})()

我认为,对于每个请求,服务器都需要唯一令牌(由"18q1xp3lm5" : "1ptur1oxbz1i5vwea0u61397214250740"设置标识)。如果不满足条件,它会向浏览器发送重新加载请求。

由于调用是通过AJAX进行的,因此无法重新加载页面,但由于重复使用令牌,因此没有结果。