【问题标题】:why Ajax get Request failed为什么 Ajax 获取请求失败
【发布时间】:2013-07-29 09:50:34
【问题描述】:

我的请求的响应是一个 java 脚本代码。当我将 url 放入浏览器时,我可以在页面上看到整个生成的 java 脚本代码。传递给 $.ajax 的 url 格式如下:

http://localhost:8080/vi-api/viapi?action=tag&projectId=45&tagId=345

当我输入上面的 URL 时,我可以看到请求成功。现在,我正在使用 jQuery 对这个 url 使用下面的 Ajax 请求。

   var finalUrl = "http://localhost:8080/vi-api/viapi?action=tag&projectId=45&tagId=345";
   var req = $.ajax({
             type:"GET",
             url:finalUrl,
             type:"script",
             data:"",
             success: function(html){
                alert('Requese sucessful.');
              },
            complete:function(jqXHR, textStatus) {
                alert("request complete "+textStatus);
             },
            error: function(xhr, textStatus, errorThrown){
                alert('request failed->'+textStatus);
            }             
           });  

问题1:这给出了警报“请求失败错误”。为什么会这样?

问题2:有没有办法在上面的过程中返回成功/失败代码?

【问题讨论】:

  • 第 1 行语法错误..
  • 好的。抱歉,我只使用字符串。

标签: ajax jquery xmlhttprequest


【解决方案1】:

在:

$.ajax({
     type:"GET",
     url:finalUrl,
     type:"script",
     (...)

您的对象中有两倍的“类型”键。所以我认为只有第二个被采用('脚本')。显然,“脚本”不是有效的 HTTP 方法(如 HEAD、GET、PUT、POST 等)。您正在寻找“脚本”的关键字可能是 dataType,它可能是 xmljsonjsonptextscripthtml 之一。

不要忘记查看jsonp,它通常是返回脚本内容并调用它的好方法。

【讨论】:

  • +1 酷..!你真聪明。现在,问题解决了一半。但是,这里为什么叫成功呢?
  • Umesh:我不明白你的问题,why success is called?什么时候调用,为什么你认为不应该调用?
  • 对不起。打字错误。我希望成功被称为。但是,这段代码并没有完成。它正在调用错误和完整的功能。
  • Umesh:现在 dataType 是固定的(也只出现一次),你能在 firebug 中看到请求(和响应)吗,xhr、textStatus、errorThrown 的内容是什么(使用console.log() ) 在你的错误处理程序中?
【解决方案2】:

我不知道为什么,但我可以给你一些调试或找出问题的提示:

1) 安装fiddler 以查看HTTP 请求。

2) type:"script",为什么类型是script?尝试使用“text/html”。

3) 使用complete(jqXHR, textStatus)可以查看HTTP状态。 more info about $.ajax

【讨论】:

  • 谢谢。即使使用“text/html”也执行相同的类型。我在代码中添加了 complete() 进行测试。 Complete 已被调用并且 'textStatus' 是错误的。实际上,我在 Firebug 中看不到请求。
  • 用 fiddler 进行测试在另一个场景中拯救了我。我忘记在 Asp.net MVC 响应 JSON 结果中使用 JsonRequestBehavior.AllowGet。
【解决方案3】:
var finalUrl=http://localhost:8080/vi-api/viapi?action=tag&projectId=45&tagId=345;

是非常无效的javascript。您可能意味着将 url 作为字符串传递:

var finalUrl = 'http://localhost:8080/vi-api/viapi?action=tag&projectId=45&tagId=345';

【讨论】:

  • @Umesh,那么AJAX请求发送了吗?你在 FireBug 中看到了吗?错误发生在哪里?在哪条线上?
  • 您好 Darin,我在 Firebug Net 选项卡中没有收到任何请求,但上面的代码给出了 2 个警报 - 1.request failed->error 2.request complete error。这意味着正在使用此 url 调用“完成”和“错误”。
  • 也许您违反了same origin policy,它阻止您发送跨域AJAX 请求?包含此脚本的页面是否托管在 http://localhost:8080/ 上?或者,您尝试调用的服务器端端点可能只是一个错误?您在“网络”选项卡中看到什么 HTTP 状态代码?服务器的响应是什么?
  • +1。谢谢。这可能是因为代码似乎是正确的。页面不在服务器上。我正在检查,会在几分钟内通知您。
  • 达林,问题解决了一半。我将页面放在服务器上。但是,我希望看到“成功”被称为。因为我的 ajax 请求在这里完成。
猜你喜欢
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2014-11-23
  • 2017-04-02
  • 2018-11-30
相关资源
最近更新 更多