0

我正在对我无法控制的产品进行以下 jQuery.ajax() 调用:

$.ajax({
    type: "POST",
    url: "/WfWsR",
    data: { method: 'getInfo',
        nodeID: nodeID
    },
    dataType: "text",
    success: function(data, response, replyxhr){
        return data;
    },
    error: function(replyxhr, response){
        console.log(response);
        console.log(replyxhr);
        return response;
    }
});

POST 以 200 OK 成功,但没有进入成功函数,而是以错误结束,响应变量设置为“错误”,replyxhr 变量设置为 Object { readyState=0, status=0, statusText="错误”}。

通过 Postman 手动尝试 POST 会产生结果:

new Array(
  new Array(
    new Array(
      "15", "1", ""
    )
  ), 
  new Array(
    new Array(
      "1", "3757", "3757", "user", "2013-01-22 15:09:04.354"
    )
  ), 
  new Array(
  ), 
  new Array(
    "3762", "ABCD", "test Purge Documents", "50", "purge Documents", "Administrator", "2013-01-22 15:07:57.065"
  ), "13d886ddf90"
)

那是很多 JavaScript;从技术上讲,我只需要这些数组中的一个。我认为它在 jQuery 中不起作用的原因是因为这种返回可能是无效的,特别是考虑到 dataType:“text”。但我也不能使用 dataType: "script" ;使用隐式 GET 而不是 POST,并且相关 URL 不支持 GET。

我还有其他选择吗?

4

2 回答 2

0

最终编写了我自己的 xhr 调用(没有错误处理)来允许这样做。一个可怕的问题的可怕解决方案。(eval() 两次失败)。

var xhReq = new XMLHttpRequest();
var params = "method=getInfo&nodeID=" + nodeID;

xhReq.open("POST", "/WfWsR", true);
xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhReq.onreadystatechange = onPostSubmit;
xhReq.send(params);
var response = eval(xhReq.response);
var stepIDx = response[0][0][0];

return stepIDx;

function onPostSubmit() {
    if (xhReq.readyState==4 || xhReq.readyState=="complete") { 
        if (xhReq.status != 200) {
            alert('BadStatus');
            return;
        }
    }
}
于 2013-04-04T19:52:07.883 回答
0

根据响应,我猜测您是在告诉 Ajax 期待text,但它正在得到其他东西。content-type看来服务器正在为您提供 Javascript,因此如果内容类型为text/javascript.

我从来没有处理过这个问题,但如果这是你的问题,文档确实说在 jQuery 1.5 和更高版本中有一个解决方案:

多个空格分隔的值:从 jQuery 1.5 开始,jQuery 可以将 dataType 从它在 Content-Type 标头中接收到的内容转换为您需要的内容。例如,如果您希望将文本响应视为 XML,请使用“text xml”作为 dataType。您还可以发出 JSONP 请求,将其作为文本接收,并由 jQuery 解释为 XML:“jsonp text xml”。类似地,诸如“jsonp xml”之类的速记字符串将首先尝试从 jsonp 转换为 xml,如果失败,则从 jsonp 转换为文本,然后从文本转换为 xml。

通过http://api.jquery.com/jQuery.ajax/(有关数据类型,请参阅文档)

这意味着您可以使用这个:dataType: "script text"将 Javascript 响应解释为文本。当然,您也可以只使用dataType: "script"将其解释为脚本。

于 2013-03-22T01:42:08.033 回答