如果readystate = 4且status = 200则执行Jquery S.Ajax错误处理程序

标签 jquery ajax status readystate

我正在执行一个 $.ajax 调用,它返回一个 json 响应,一切看起来都很好,但不是调用成功处理程序,而是调用 $.ajax 错误处理程序,即使 readystate=4 和状态=200。

$.ajax 调用是:-

    $.ajax({
        url: 'inc/ajax_printorder.asp',
        type: "GET",
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false,
        success: function (sendresponse) {
            var message = (typeof sendresponse.jsonresp) == 'string' ? eval('(' + sendresponse.jsonresp + ')') : sendresponse.jsonresp;
            if (message[0].ok == '1') {
                var order = window.open('', 'PrintWindow', 'width=600,height=600');
                var html = '<html><head><title>Print Your Order</title></head><body><div id="myprintorder">' + $('<div />').append(message[0].msg) + '</div></body></html>';
                order.document.open();
                order.document.write(html);
                order.document.close();
                return false;
            };
        },
        error: function (xhr, err) {
            alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
            alert("responseText: " + xhr.responseText);
        }
    });

从 Firebug 来看,ajax 响应是:-

{"jsonresp":[{"__type":"sendresponse","ok":"1","msg":"<h1>Your www.sandwichlunchesnewbury.co.uk order on 02/05/2011 00:34:01</h1><p>Website order from www.sandwichlunchesnewbury.co.uk on 02/05/2011 00:34:01 from:- </p><table width="60%" style="border:1px solid blue;padding:5px;"><tr><td>Name</td><td> a </td></tr><tr><td>Phone</td><td> b </td></tr><tr><td>Email</td><td>  </td></tr><tr><td>Business name</td><td>  </td></tr><tr><td>Delivery address</td><td> c </td></tr><tr><td>Date food required</td><td> Monday, 02/05/2011 </td></tr><tr><td>Time food required</td><td> 10 Am </td></tr><tr><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>Just Sandwiches (standard)</td><td>  </td></tr><tr><td>Just Sandwiches (gourmet)</td><td>  </td></tr><tr><td>Just Baguettes (standard)</td><td>  </td></tr><tr><td>Just Baguettes (gourmet)</td><td>  </td></tr><tr><td>Gourmet Bread Sandwiches</td><td> 2 </td></tr><tr><td>Sausage rolls</td><td>  </td></tr><tr><td>Cookie boxes</td><td>  </td></tr><tr><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>Total price</td><td> &pound;50.00 </td></tr><tr><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td colspan="2">Other info & special instructions </td></tr><tr><td colspan="2"> </td></tr></table>"}]}

对于为什么会出错而不是成功有什么想法吗?

谢谢

epx

最佳答案

您的响应 JSON 无效,除其他外,您需要转义双引号(\" 而不是 ")。您没有发布错误文本(传递给 errorerr 值),但我怀疑它是 parsererror

我找到了JSONLint对于确保我接收/发送有效的 JSON 非常有用。

关于如果readystate = 4且status = 200则执行Jquery S.Ajax错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852257/

相关文章:

git - 如何在 github 存储库中执行状态检查

javascript - 当我使用 data-rel ="chosen"json ajax 数据未与下拉列表绑定(bind)时

javascript - JSDOM 未在 Node 中加载脚本文件

jquery - 如何处理 jquery ajax 与 jsp 数据库更新?

java - 如何制作一个在每个 AJAX 请求页面时重新呈现的 wicket 组件?

javascript - 如何将自定义 html 标签传递给 jquery-confirm?

jenkins - 无法在 Jenkins 管道中将作业状态设置回成功

authentication - 为什么error login和password server return status 200 ok

javascript - 从 jQuery GET 请求执行脚本

javascript - 避免重复的 dom 查询?