2014-09-05 75 views
1

我应该请求数据为jsonp来执行跨域请求。但实际返回的结果是json,如{"q":"iphone","r":["iphone 5","iphone","обмен на iphone","iphone 4","iphone 5s"]}如何通过jQuery ajax dataType使用多个值?

我试图在dataType使用多个值,如:

$.ajax({ 
    url: url, 
    type: 'GET', 
    dataType: 'jsonp json', 
    jsonp: false, 
    ... 

但它返回parsererror(一样只是jsonp)。

我也试图与不callback做呼叫:

$.ajax({ 
    url: url, 
    type: 'GET', 
    dataType: 'jsonp json', 
    cache: true, 
    jsonpCallback: 'callbackFunctionName', 
    jsonp: 'callback', 

我能做些什么,以正确处理这样的结果?

Upd。我试图用script而不是jsonp,它工作得更好 - success/done函数被调用(而不是error/fail),但我不能得到响应文本 - 传递给success()数据undefined以及jqXHR.responseText传递给complete()是空的。

+0

您的URL是否包含回调函数? – sri 2014-09-05 11:18:42

+0

你有没有偶然发现这一点:http://stackoverflow.com/questions/5943630/basic-example-of-using-ajax-with-jsonp#answer-14523763? – sri 2014-09-05 11:19:31

+1

@sri,我已经尝试使用和不使用回调函数。 – 2014-09-05 11:22:37

回答

1

不能使用多种数据类型,如果你使用JSONP这将返回你可以用它来调用回调函数来处理这样的返回数据的JSONP块:

Basic example of using .ajax() with JSONP?

你想回复形成一个响应,形成一个像这样的jsonp块:

callback({“q”:“iphone”,“r”:[“iphone 5”,“iphone”,“iphone”,“ iphone 4“,”iphone 5s“]});

从这里你可以使用回调,假设你正在使用带有set回调参数的ajax-call。

+0

我是否也可以在'script'中使用它?如果我使用'script'而不是'jsonp',然后调用'success'函数(而不是'error'),但是我不能得到响应文本 - 传递给'success()'的'data'是未定义的传递给'complete()'的'jqXHR.responseText'是空的。 – 2014-09-05 11:34:29

+0

我的情况 - 服务器的主要问题返回纯'json',而不是'jsonp'块。因此,链接问题中给出的示例也不起作用。 – 2014-09-05 11:46:22

+0

您必须将响应形成为jsonp块,否则您将得到一个以json形式构建的字符串,但该字符串有望成为jsonp块。 – 2014-09-05 11:58:39

0

如果您需要从URL返回多个数据类型,那么在jQuery AJAX调用中不需要传递dataType

$.ajax({ 
     type: "GET", 
     url: url, 
     data: data, 
     //dataType: "json", comment this line 
     cache: false, 
     beforeSend: function() {}, 
     success: function (data) {}, 
     error: function (xhr, ajaxOptions, errorThrown) {} 
     });