Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Ajax请求失败,可以';我不明白为什么_Jquery_Ajax_Api_Get_Request - Fatal编程技术网

Jquery Ajax请求失败,可以';我不明白为什么

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:{

我已经创建了一个用json返回数据的API,现在我正在创建一个应用程序,通过接收数据并在页面上使用它来测试API。但是,我的ajax代码(下面的se)由于某种原因失败,错误只显示“error”(error:error)

代码可能有什么问题

代码:

    $.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"
    });