JQuery,删除一行之前使用作为承诺

JQuery, remove a row befor using as promise

本文关键字:承诺 一行 删除 JQuery      更新时间:2023-09-26

我正在使用rest api,其中答案出于安全原因有前缀,我无法更改此格式。例子:

throw 'allowIllegalResourceCall is false.';
{
  "searchResult" : [ {
    "name" : "stackoverflow",
    "found" : true
  } ]
}

我的请求应该返回一个承诺,但我想删除第一行> throw 'allowIllegalResourceCall is false.'; <我的函数定义为:

var searchAPI = function() {
var errorFunction = function errorFunction(x) {
    console.log("searchError:");
    console.log(x);
};
var successFunction = function successFunction(x) {
    console.log("searchSuccess:");
    console.log(x);
};
var parse = function(data) {
    var escaped = data.responseText.replace(/^throw [^;]*;/, '');
    console.log("parsed:");
    console.log(JSON.parse(escaped));
    return JSON.parse(escaped);
};
var fn = function() {
    var searchFor = $j('#searchfield').val();
    console.log("prepare ajay, with: "+searchFor);
    var promise = $j.ajax({
        url : "/service/rest/stackoverflow/search",
        type : "get",
        data : {
            "query" : searchFor
        },
        success: function(data, textStatus, xhr) {
            console.log('parse');
            console.log(data);
            return parse(data);
        },
        // only for debbuging purpose
        error: function(data, textStatus, xhr) {
            console.log('parse');
            console.log(data);
            return parse(data);
        }
    });
    promise.done(successFunction);
    promise.fail(errorFunction);
    // promise.always(alwaysFunction);
}
return fn;
};

对于每个请求调用错误,我不知道为什么,http状态是200(这意味着OK)

浏览器日志如下:

parse
Object {readyState: 4, setRequestHeader: function, getAllResponseHeaders: function, getResponseHeader: function, overrideMimeType: function…}
parsed:
Object {"searchResult": Array[1]}
searchError:
Object {readyState: 4, setRequestHeader: function, getAllResponseHeaders: function, getResponseHeader: function, overrideMimeType: function…}

请求似乎有效,但为什么要调用错误函数?怎么可能我能搞定吗?我的失败在哪里?

编辑:我发现了以下问题,返回值应该被解析为json,这在这一点上是无效的:

parsererror 
SyntaxError {stack: (...), message: "Unexpected token h"}

最终解决,需要一个dataFilter:

var searchAPI = function() {
var errorFunction = function errorFunction(x) {
    console.log("searchError:");
    console.log(x);
};
var successFunction = function successFunction(x) {
    console.log("searchSuccess:");
    console.log(x);
};
var parse = function(data) {
    var escaped = data.responseText.replace(/^throw [^;]*;/, '');
    return escaped;
};
var fn = function() {
    var searchFor = $j('#searchfield').val();
    console.log("prepare ajay, with: "+searchFor);
    var promise = $j.ajax({
        url : "/service/rest/stackoverflow/search",
        type : "get",
        data : {
            "query" : searchFor
        },
        dataFilter: function (data, type)
             {
                  return parse(data, type);
             },
    });
    promise.done(successFunction);
    promise.fail(errorFunction);
    // promise.always(alwaysFunction);
}
return fn;
};