使用jquery为json内容发出跨域请求时出错

时间:2013-08-09 18:49:27

标签: javascript json web-services jquery

我正在尝试调用以json格式返回数据的服务。我正在使用jquery-ajax请求来获取响应数据。

 $('#butCallAjax').click(function () {
         $.ajax({
             url: 'my service url',
             type: 'GET',
             data: {},
             success: function (data) {
                 if (data == "success") {
                     alert('request sent!');
                 }
             },
             error: function () {
                 alert('error');
             }
         });
     });

使用此代码我收到错误

  

Access-Control-Allow-Origin不允许使用Origin'servername'。

然后我在这里找到了一些答案并通过在请求中使用dataType:'jsonp'来解决这个问题但是当我使用此dataType:'jsonp'时,我收到此错误

  

未捕获的语法错误:意外的令牌:

我理解这是因为服务正在返回'json'而不是jsonp

所以我无法弄清楚如何调用返回json内容并处理跨域请求的服务。

Js Fiddle Try

2 个答案:

答案 0 :(得分:0)

这不直接回答你的问题,但它也是实现你正在尝试的方法的一种方式:

您可以使用:

/* java side: */
$.getJSON("URL?some_call_back_function=?", dataToPass, function(data){
// do whatever you like..
});

/* php side: */
 if(isset($_GET['some_call_back_function']) && $_GET['some_call_back_function'] != ''){
     $someJsonToReturn = array('Something'=> "something");
     echo $_GET['some_call_back_function'].'('.json_encode($someJsonToReturn ).')';
 }

我希望有所帮助。我通常在需要跨域时使用它。

这是jquery API: getJson API

答案 1 :(得分:0)

您正在尝试进行失败的跨域调用。

我修改了你的jsFiddle并添加了

async: false,
cache:false

另外将errorObject参数添加到ajax中的“Error”。

您可以看到我的更改 here

我现在得到的答案是“网络错误dom exception 19”。

DOM异常19指的是“网络错误”。

您在Ajax通话中联系的网址是否可用?

如果服务器支持跨域请求在进行实际的GET / POST调用之前,浏览器会向服务器发出OPTIONS调用,以检查它是否支持跨域请求。检查您联系的服务器是否支持跨域请求。

有关跨域请求的更多详细信息,请参阅此文章,这非常有用: using CORS