Jquery Ajax请求失败,可以';我不明白为什么
我已经创建了一个用json返回数据的API,现在我正在创建一个应用程序,通过接收数据并在页面上使用它来测试API。但是,我的ajax代码(下面的se)由于某种原因失败,错误只显示“error”(error:error) 代码可能有什么问题 代码:Jquery Ajax请求失败,可以';我不明白为什么,jquery,ajax,api,get,request,Jquery,Ajax,Api,Get,Request,我已经创建了一个用json返回数据的API,现在我正在创建一个应用程序,通过接收数据并在页面上使用它来测试API。但是,我的ajax代码(下面的se)由于某种原因失败,错误只显示“error”(error:error) 代码可能有什么问题 代码: $.ajaxSetup ({ url: "http://localhost:8000/products", // <--- returns json type: "GET", headers:{
$.ajaxSetup ({
url: "http://localhost:8000/products", // <--- returns json
type: "GET",
headers:{
"Accept":"application/json",
"Content-type":"application/x-www-form-urlencoded"
}
})
$.ajax({
success: function(data){
console.log("You made it!");
},
error: function(xhr) {
console.log("Error: " + xhr.statusText);
}
}).done(function(data){
console.log(data);
})
$.ajaxSetup({
url:“http://localhost:8000/products“,//网络):
名称:产品本地主机/,方法:获取,状态:(已取消),类型:挂起,发起人:jquery-latest.js:8434脚本,大小:13B 0B,时间:95ms 0.0天为什么不尝试将两个ajax调用合并到一个中。同时尝试更改Type=“POST”
试着使用just
$.ajax({
url: "http://localhost:8000/products",
dataType: 'json',
success: function(data){
console.log("You made it!");
},
error: function(xhr) {
console.log("Error: " + xhr.statusText);
}
});
您可以在success或complete callback中使用代码行,而不是使用done callback。这非常简单和干净。我认为您的浏览器缓存了错误,或者在正确设置标题时可能存在问题,因此请尝试以这种方式在$.ajaxsetup()中添加:
$.ajaxSetup({
url:“http://localhost:8000/products“,//可能有什么问题
我想我知道你这里的问题。似乎你正在加载一个协议+域+端口的第一页(例如“http://localhost/
”),但随后调用对不同协议、域或端口的AJAX请求(在这种情况下,可能只有端口不同:“http://localhost:8000/products“
)
这样,您可能会遇到限制,这是您浏览器的安全功能。在这种情况下,浏览器可能会指示特定请求已“取消”(因为浏览器阻止了它)
解决方案
您的问题有多种解决方案:
- (最简单的)对于原始站点和AJAX请求的端点,坚持使用相同的协议+域+端口
- (第二简单)在服务器上构建一个端点,例如“
http://localhost/products
“将调用”http://localhost:8000/products
“并将返回其响应(作为SOP的演练)
- 一些更复杂的解决方案,如JSONP、CORS等(更多信息:
要解释您的答案吗?当您在ajax请求完成之前取消ajax请求,或导航到另一个页面或刷新页面时,可能会出现status或readyState==0的错误。您可以从第一个或第三个参数获得错误的详细信息-尝试使用console.log(…)将它们记录到控制台
看看会发生什么。@PavelHodek:我尝试了你的代码和readyState,状态为0,所以我想没有“真正”的错误?@holyredbeard我想没有错误。还可以尝试使用Firebug(Firefox扩展)检查响应或者使用Fiddler或Chrome中的开发者工具-您可以在那里看到作为响应提交的数据。如果一切正常且数据正常,则不会发生错误。@holyredbeard有Net选项卡,其中有XHR选项卡-您可以在这里查看当前页面的所有Ajax请求和响应(url、内容、标题等)。您也可以使用Firebug调试JavaScripts,只需在Firebug的JavaScript源代码中放置断点(选项卡脚本)-在那里您可以查看任何对象信息。“一次调用两个ajax”?只有一个调用。如果您谈论的是调用$.ajaxSetup()
,那么OP可能希望在将来使用它(就像通过应用干式原理简化代码一样)。@Tadeck:谢谢你提供的信息。我不知道:)顺便说一句$.ajaxSetup()
不进行任何ajax调用,它只是ajax模块的设置。你成功了还是成功了。@Jai:他们都没有,我有错误。还有一件事,url返回json编码的数据。@holyredbeard:你能看看Chrome开发者工具的“网络”选项卡吗并将调用结果粘贴到此处?我怀疑服务器响应可能是问题所在。此外,您是否按照Pavel Hodek在中的建议取消了请求?@Tadeck:当然。我会用这些信息更新我的问题!谢谢,我同意这会更干净。尽管问题仍然存在-抛出的错误。仍然会出现错误,但URL得到了一些什么在控制台中添加以下行时不会有不同:GET(添加问号和所有数字)。
$.ajax({
/* ajax options omitted */
error: function (xmlHttpRequest, textStatus, errorThrown) {
if(xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0)
return; // it's not really an error
else
// Do normal error handling
});
$.ajax({
url: "http://localhost:8000/products",
dataType: 'json',
success: function(data){
console.log("You made it!");
},
error: function(xhr) {
console.log("Error: " + xhr.statusText);
}
});
$.ajaxSetup ({
url: "http://localhost:8000/products", // <--- returns json
type: "GET",
dataType: 'json',
cache: false,
contentType: "application/json"
});