2013-06-04 79 views
0

我在使用jQuery(v1.9.1)ajax时遇到了问题。jQuery Ajax失败;文件正确加载

这里是非常简单的JS(common.js):

var BASE_URL = window.location.protocol + '//' + window.location.host + '/'; 

$(document).ready(function(){ 
    //load menu 
    $.ajax({ 
     type : 'GET', 
     url : BASE_URL + 'menu.json', 
     dataType: 'json' 
    }) 
    .done(function(){alert('D');}) 
    .fail(function(){alert('F');}) 
    .always(function(){alert('A');}); 
}); 

据Firebug的文件(menu.json)是否正确装入。但问题在于我总是收到警报消息FA

那么为什么这是非常简单的代码不工作?我无法弄清楚。

如果这里需要的是把对应的HTML部分:

<!DOCTYPE html> 
<html> 
    <head> 
     ... 
     <script type="text/javascript" src="js/jquery.js"></script> 
     <script type="text/javascript" src="js/common.js"></script> 
    </head> 
.... 

两个JavaScript文件被正确加载。

UPDATE

这里是menu.json内容(是它的静态)

[ 
    { 
     "name": "Home", 
     "url": "#main" 
}, 
{ 
     "name": "WTF", 
     "url": "#wtf" 
    } 
] 
+3

第一个猜测:'menu.json'不包含有效的JSON。我们可以看到它的内容吗? –

回答

3

只是因为转会成功并不意味着AJAX调用一样。很有可能你的回应是无效的JSON。您可能还需要确保Web服务器为JSON返回正确的Content-type,即application/json

编辑证实 - JSON要求密钥(和字符串值)在双引号

的另一个常见原因是跨来源资源共享安全问题被封闭,尽管这不应该是一个因为您是从当前页面的同一网站下载的因素。

而且,真的没有必要指定BASE_URL - 只使用路径/menu.json

+0

好的。只需在它周围放置双引号(我会在第二次更新该帖子)。但它仍然无法正常工作。我想这是因为在“Response-Header”部分没有“Content-Type”标题。见[这里](http://data.a-morillon.de/images/jq_ajax.JPG) –

+0

所以刚刚发现错误。它仍然只是json文件中的一个错误。谢谢你指点我。 –