2013-02-21 156 views
2

我正在编写一个基于Web的应用程序,它可以调用服务器来从REST-ful应用程序更新服务器中的特定对象。jQuery ajax()调用失败

这是我写的JavaScript代码。

var sendUrl = url + "v1/items/" + itmId; 
$.ajax({ 
    "type": "PUT", 
    "url": sendUrl, 
    //"data": {"name": nameVal, "description": descVal}, 
    "success": function() { 
     alert('hai'); //refreshItems(); 
    }, 
    "complete": function (jqXHR, textStatus) { 
     alert (textStatus); 
    } 
}); 

当执行此代码时,服务器没有收到任何请求。浏览器没有显示任何更新。

我将Google Chrome用作我的浏览器。所以,我看着Chrome的JavaScript控制台,控制台显示此错误:

Error from Chrome's Console

是否有解决这个问题的任何可能的解决方案?


编辑:

正如评论一个建议,我试图寻找到网络面板。它似乎没有打电话给服务器。

这是此特定请求的屏幕截图: enter image description here

的图像是非常小的。状态为“(失败)”且类型为待执行

如果服务器未配置PUT,则会导致内部服务器错误。所以,这不是在这里发生的。


编辑

试图在回答中给出的建议后,

这是代码:

var sendUrl = url + "v1/items/" + itmId; 
$.ajax({ 
    "type": "PUT", 
    "url": sendUrl, 
    //"data": {"name": nameVal, "description": descVal}, 
    }).done(function () { 
     alert('OK'); 
    }).fail(function (jqXHR, textStatus, errorThrown) { 
     console.log(jqXHR); 
     console.log(textStatus); 
     console.log(errorThrown); 
    }); 

下面是已记录的对象:

enter image description here

+0

你设置你的服务器来处理'PUT'要求 – Musa 2013-02-21 00:25:12

+2

那是一个错字错误注释掉你的'数据'? – 2013-02-21 00:28:37

+1

很难从外面猜测。第一步是调查Chrome网络面板中的特定呼叫。您可以在面板中筛选XHR请求。检查服务器是否发送了任何响应。检查请求是否包含拼写错误或缺少必填字段。另外请记住,执行AJAX调用时端口必须匹配。 – 2013-02-21 00:33:52

回答

6

Docs for jquery Ajax function W3 specs regarding http/1.1 status codes


首先,jQuery的文档中规定

Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks are deprecated as of jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

而且,失败函数接受下列参数:

jqXHR, textStatus, errorThrown 

既然你”重新获得出现错误请尝试以下代码:

var sendUrl = url + "v1/items/" + itmId; 
$.ajax({ 
    "type": "PUT", 
    "url": sendUrl, 
    //"data": {"name": nameVal, "description": descVal}, 

}).done(function () { 
    alert('OK'); 

}).fail(function (jqXHR, textStatus, errorThrown) { 
    console.log(jqXHR); 
    console.log(textStatus); 
    console.log(errorThrown); 
}); 

这应该向控制台输出有关为什么ajax调用不工作的有用信息。

如果你的web服务工作正常,它应该返回一个http状态码。下面是一些常见的响应代码:

200 OK -> Everything is ok (it worked) 
201 Created -> Ok too 

400 Bad Request 
401 Unauthorized 
404 Not found 

所以,基本上,你得到的回应应该反思,为什么它不工作