$.ajax({ beforeSend: function(xhr) { xhr.setRequestHeader('Authorization', "Basic YWRtaW46YWRtaW4="); }, url: "https://test.com/incident.do?JSON&callback=?&sysparm_action=getRecords", dataType: "json", contentType: "application/json", method: 'GET', success: function(a,b,c) { alert(a); } });
我通过按下按钮来调用此函数… Firebug显示我得到了这个JSON响应(我知道这是有效的)[为清楚起见,被截断了]
{ "records": [ { "service_offering": "", "number": "INC0000009" }, { "service_offering": "", "number": "INC0000010" } ] }
Firebug显示错误“无效标签 https://test.com/incident.do?JSON&callback=jsonp1279049933243&sysparm_action=getRecords 第1行
我怎样才能解决这个问题?谢谢!
您的响应是有效的JSON,但这不是jQuery想要的。当您&callback=?在URL中指定时,jQuery期待的是JSONP响应(看起来有所不同),您的响应 应 为
&callback=?
jsonp1279049933243({ "records": [ { "service_offering": "", "number": "INC0000009" }, { "service_offering": "", "number": "INC0000010" } ] });
当您指定时会发生什么,callback=?就是jQuery为您的success函数生成一个名称,在这种情况下jsonp1279049933243,JSONP的工作原理是仅<script>在页面中生成一个标记,因此,当获取该url时,它实际上只是包括一个JavaScript文件,运行一个函数,但代替这个:
callback=?
success
jsonp1279049933243
<script>
<script type="text/javascript"> jsonp1279049933243({ "records": [....] }); </script>
现在有效发生的是:
<script type="text/javascript"> { "records": [....] } </script>
…这不是有效的JavaScript。现在,当然是通过加载的src=https://test.com/incident.do?JSON&callback=jsonp1279049933243&sysparm_action=getRecords,但是无效的语法/标签错误是相同的。
src=https://test.com/incident.do?JSON&callback=jsonp1279049933243&sysparm_action=getRecords