gpt4 book ai didi

jquery - json(p),solr,jquery 1.5.2, 'not called'?

转载 作者:行者123 更新时间:2023-12-01 04:26:51 24 4
gpt4 key购买 nike

我有一个正在运行的 Apache Solr 4.0 快照实例。对于任何不知道的人,Solr 提供了一个执行查询的 HTTP 端点。您可以要求它以 json 或 jsonp(或其他不相关的内容)形式返回结果。

使用 jquery 1.5.2,我尝试使用 $.ajax 来处理这个问题,使用 github 上 ajax-solr 项目的代码。作者为 jsonp 设置了一些东西,以允许跨域工作。

当你向 solr 询问 jsonp 时,它确实会提供 jsonp。它确实将 json 包装在函数调用中。

在那种 (jsonp) 操作模式下,我无法让它在 Chrome 或 Firefox 4 上工作。我对 jquery 进行了一些调试,但我可能发现了一些转移注意力的线索。

触发问题似乎是 solr 返回“text”而不是“application/json”的内容类型。这反过来会触发 jquery 中的一些复杂代码,尝试多种转换策略。

在 Chrome 中,当整个 block 附加到 DOM 脚本节点时,似乎会发生非法语法抛出。在 Firefox 中,没有明显的错误,但 jsonp 函数永远不会被调用。

当我将内容更改为使用纯 json 而不是 jsonp 时,一切正常(我让 solr 在与与之通信的静态内容相同的主机:端口中运行。)

我已经粘贴了一大堆 jsonp 并将其链接到下面。它在语法上是有效的。我很困惑,但并没有陷入困境,因为对于我的应用程序来说,使用纯 json 效果很好。

回答者指出,文本中包含在 jsonp 中无效的字符,因为它们在 javascript 中无效,作为 jsonp 失败的解释。

与 solr 对话的代码:

var url = this.solrUrl + servlet + '?' + this.store.string() + '&wt=json&json.wrf=?';
jQuery.ajax({
url: url,
dataType: 'jsonp',
success: function (data, textStatus, xhr) {
self.handleResponse(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + " " + errorThrown);
}
});

这涉及到带有 errorThrown 的错误函数:

错误抛出:“未调用 jQuery15205321112349629402_1304645690480”

响应看起来像是对那个可爱的项目的函数调用。

Chrome 控制台显示“未捕获的语法错误:意外的 token 非法”。

我捕获了 javascript 的全部负载,并将其提供给 jsLint,它没有任何提示。

Pastebin:http://pastebin.com/ft5rw6uT

我将尝试在 chrome 中捕获解析异常。

这是 jquery 抛出异常的地方:

     // Evalulates a script in a global context
globalEval: function( data ) {
if ( data && rnotwhite.test(data) ) {
// Inspired by code by Andrea Giammarchi
// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement,
script = document.createElement( "script" );

if ( jQuery.support.scriptEval() ) {
script.appendChild( document.createTextNode( data ) );
} else {
script.text = data;
}

// Use insertBefore instead of appendChild to circumvent an IE6 bug.
// This arises when a base node is used (#2709).
head.insertBefore( script, head.firstChild );
//Chrome annotates the above with:
//jquery-1.5.2.js:593Uncaught SyntaxError: Unexpected token ILLEGAL
head.removeChild( script );
}
}

这是通过 CURL 获取的版本,使用较短的字符串作为函数名称。

http://pastebin.com/zB6BkmEL

最佳答案

Mkoryak 的回答是正确的。您的 solr 服务器需要将响应包装在 jsonp 调用创建的方法中。看来您采纳了他的建议,现在您正在尝试一些新的东西。

您在 Chrome 中看到的错误:

'Uncaught SyntaxError: Unexpected token ILLEGAL'.

是一些 unicode 字符在 json 解析器中未正确解释的结果。为此,您应该向 Chrome 人员提交错误报告。同时,去掉诸如“\342\200\251\”(段落分隔符)之类的 unicode 字符,您就可以开始工作了。

编辑:看起来 Chrome 人员已经掌握了它:http://code.google.com/p/v8/issues/detail?id=616所以直到:http://ecma262-5.com/ELS5_HTML.htm#Section_15.12.1.1 - JSON 字符串中不允许换行。也许我们可以让 Chrome 人员为我们提供更好的错误处理。

关于jquery - json(p),solr,jquery 1.5.2, 'not called'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com