jQuery的令牌输入不处理跨域结果(jQuery token-input not processi

2019-10-30 18:16发布

我创建它采用了Chrome扩展http://loopj.com/jquery-tokeninput/添加标记,请参阅前面的问题 。

我很困惑,如何从我的服务器结果被tokenInput处理。 下面的文章, 什么是JSONP? ,表明我需要添加一个回调查询参数来获得跨域JSONP工作:

$(function() {
  $("#token").tokenInput("http://localhost/token/search?callback=jsonprocess", {
    preventDuplicates: true,
    crossDomain: true,
  });
});

这是用来包裹在我的PHP代码的响应:

header('Content-type: text/javascript');
echo $this->request->query('callback') . '(' . json_encode($token_array) . ')';
exit;

然后调用jsonprocess()在我的JavaScript方法。 然而,这是不可能的tokenInput实例的情景,所以我无法填充的结果。 这是正确的功能? 还是有办法让jQuery的tokeninput直接插件进程JSONP?

成功回调tokeninput:

ajax_params.success = function(results) {
    cache.add(cache_key, $(input).data("settings").jsonContainer ? results[$(input).data("settings").jsonContainer] : results);
    if($.isFunction($(input).data("settings").onResult)) {
        results = $(input).data("settings").onResult.call(hidden_input, results);
    }
};

...永远不会被调用。

Answer 1:

更容易比我想象的; 不需要?callback=jsonprocess在搜索网址

$(function() {
  $("#token").tokenInput("http://localhost/token/search", {
    preventDuplicates: true,
    crossDomain: true,
  });
});


Answer 2:

老兄,你需要在JavaScript和PHP这样的回调:

JavaScript的:

script.php?callback=?&your_parametars_here

而在PHP

echo $_GET['callback'].$your_data_here


Answer 3:

正如你可以看到在jQuery的Tokeninput文档 , crossDomain必须设置为true的选择,如果你想它是一个JSONP请求。

$(function() {
  $("#token").tokenInput("http://localhost/token/search?callback=jsonprocess", {
    preventDuplicates: true,
    crossDomain: true
  });
});

JSON内容类型是application/json

header('Content-type: application/json');

更新:

好吧,如果它不与JSONP工作,你应该尝试启用CORS 。

在这里你会做什么,

$(function() {
  $("#token").tokenInput("http://localhost/token/search?callback=jsonprocess", {
    preventDuplicates: true,
    crossDomain: false, //it's also false as default.
  });
});

在PHP中,你必须启用CORS,你不需要采取导致进入回调函数。 你将转储只JSON。

header("Access-Control-Allow-Origin: *");
header('Content-type: text/javascript');
echo json_encode($token_array);
exit;


文章来源: jQuery token-input not processing cross-domain results