偶尔使用 jquery 的 ajax 响应错误 { readyState=0, status=0, statusText=“error”}

Occasional ajax response error { readyState=0, status=0, statusText="error"} using jquery

提问人:Dechen 提问时间:1/16/2013 最后编辑:rrkDechen 更新时间:10/22/2020 访问量:6303

问:

我在使用 jquery(和 coldfusion 服务器端)的 AJAX 响应时遇到了问题。有时有效,有时无效。当我测试直接调用它的服务器端组件时 - 它总是有效,所以我想问题出在ajax响应上。我直接从服务器获取 serverurl - 所以这不应该是跨域问题。我只是显示和隐藏 div 标签,因此它不应该是在处理 ajax 响应之前重新定位 url。我为此拔了很多头发。

addTask 方法的代码:

function addTask(){
    var priority = $('#ff-add-task-priority').length > 0 ? $('#ff-add-task-priority').val() : 0;
        
    $.ajax({
        url: settings.server+'/c/Tasks.cfc?method=addTask',
        data: {
            userid: settings.userid, 
            taskname: $('#ff-add-task-name').val(),
            tasknote: $('#ff-add-task-note').val(),
            completed: $('#ff-add-task-completed').val(),
            priority: priority,
        },
        type: 'POST',
        dataType: 'json',
        success: function(response) {
            var output = addRow(response, $('#ff-add-task-name').val(), 0, 0);
            $('#data-list-tasks').append(output);
            
            $('#main').children().addClass('hide');
            $('#section-list-tasks').removeClass('hide');
            resetForm($('#add-task-form'));
            //route('#section-list-tasks');
        },
        error: function(ErrorMsg) {
            console.log('Error', ErrorMsg);
        }
    });
}

Firebug 输出显示 AJAX 调用有时有效,有时失败。

POST http://dev.wedoolist.com/c/Tasks.cfc?method=addTask jquery.min.js (linje 2) Error Object { readyState=0, status=0, statusText="error"} #secti...t-tasks (linje 124)
POST http://dev.wedoolist.com/c/Tasks.cfc?method=getTasks 200 OK 152ms jquery.min.js (linje 2)
POST http://dev.wedoolist.com/c/Tasks.cfc?method=addTask 200 OK 146ms jquery.min.js (linje 2)
POST http://dev.wedoolist.com/c/Tasks.cfc?method=addTask 200 OK 133ms jquery.min.js (linje 2)
POST http://dev.wedoolist.com/c/Tasks.cfc?method=addTask 200 OK 133ms jquery.min.js (linje 2)
POST http://dev.wedoolist.com/c/Tasks.cfc?method=addTask 200 OK 131ms jquery.min.js (linje 2)
POST http://dev.wedoolist.com/c/Tasks.cfc?method=addTask jquery.min.js (linje 2) Error Object { readyState=0, status=0, statusText="error"}

更新:

Request-headere
Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language da,en-us;q=0.7,en;q=0.3
Content-Length  59
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Cookie  CFID=198de696-2168-4911-8639-79ea944c9975; CFTOKEN=0;  JSESSIONID=B520084E7DDFB504BC87E200449C3DA7
Host    dev.wedoolist.com
Referer http://dev.wedoolist.com/index.cfm?add-task-completed-switch=0&ff-add-task-priority=0
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0
X-Requested-With    XMLHttpRequest

更新:

使用 fiddler 时,我收到此错误:

HTTP Error 411. The request must be chunked or have a content length.

任何帮助都非常感谢。

谢谢

彼得

jQuery Ajax ColdFusion

评论

0赞 barnyr 1/16/2013
Firebug 显示失败请求的请求和响应内容是什么?服务器是否处理请求?调用 addTask 方法时是否添加了任务?会不会是内容类型协商的问题?如果您的请求需要一种响应,而服务器正在发送可能导致错误的其他内容。我会非常仔细地查看直接调用的请求/响应与由您的代码运行的请求/响应。为此,我使用 fiddler(它支持 Diff-ing 请求对,这正是您在这里要做的)
0赞 Dechen 1/16/2013
我已经用request-header更新了问题。我没有从返回的错误中仅返回 ErrorMsg 的响应:Object { readyState=0, status=0, statusText=“error”}。我访问了服务器日志,其中没有显示任何内容(Railo coldfusion 引擎)。未添加任务。
0赞 Dechen 1/16/2013
当我直接从浏览器调用服务器方法时,它会返回插入任务的 id,即“131”——它应该如此。
0赞 Dechen 1/16/2013
@barnyr 我已经更改了ajax调用以接受各种响应。现在 request-header 说:Accept /。所以我想回应不是在寻找特定的结果。没有变化,仍然相同的错误
0赞 barnyr 1/16/2013
好吧,现在它缩小到请求而不是响应的问题。您看到的错误似乎是在抱怨没有内容长度标头,尽管我可以在您发布的示例请求标头中看到一个。尝试在 Fiddler 中捕获正常和失败的请求,然后将它们保存(右键单击、保存、请求、整个请求)并进行比较(如果还没有差异软件,请使用 Beyond Compare 试用版)。造成这种情况会有所不同。

答:

-6赞 MrRaymondLee 8/25/2013 #1

我认为您需要在数据参数中使用引号,如下所示:

data: { 'userid': settings.userid, 
        'taskname': $('#ff-add-task-name').val(),
        'tasknote': $('#ff-add-task-note').val(),
        'completed': $('#ff-add-task-completed').val(),
        'priority': priority,
      },

看看是否有帮助。

评论

3赞 sergiopereira 9/13/2013
在这种情况下,引号无关紧要。这是一个 JS 对象文本,而不是 JSON 字符串。JSON 字符串,是的,它们需要在每个字段名称上正确引用。