JQuery,删除一行之前使用作为承诺
JQuery, remove a row befor using as promise
我正在使用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;
};
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 动态插入的表:JQuery未检测到最后一行
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何在Angular UI网格中选择下一行
- 在承诺链中处理早期回报的最佳方式
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 从角度$scope承诺中删除一行
- JQuery,删除一行之前使用作为承诺
- 在进入下一行之前,我如何确保一个承诺被解决