跨域jQuery Ajax调用 - 语法缺失错误

时间:2014-01-23 09:14:33

标签: php jquery ajax

我无法从跨域访问webservice调用。请指教。我在这里粘贴了我的来源。

PHP:webservice响应

$data['response'] = 2;
header('Content-type: application/json');
echo json_encode($data);

jQuery Ajax Call:

$.ajax({
type: 'GET',
url: cross-domain-url,
data:{ param1:'123', param2:'123' },
dataType:'jsonp',
crossDomain: 'true',
async: true,
success:function (data) {
    alert('success');
},
error:function(){
    alert('error');
}
});

跨域URL响应:

{"ResultCode":2}

我总是只收到错误。我不知道为什么。我可以在Firefox检查区看到以下消息。

SyntaxError: missing ; before statement
{"ResultCode":2}

请帮帮我。

解决方案:

修改线条,     echo'someCallBackString('。json_encode($ data)。');'; 而不是echo json_encode($ data);

创建了someCallBackString函数并继续我的实现。

3 个答案:

答案 0 :(得分:0)

您告诉jQuery发出JSON-P请求(dataType:'jsonp'),但您的服务器正在返回JSON。

因此,浏览器正在尝试执行JSON文本,就像它是一个JavaScript程序一样(并且它不能,因为它不是)。

或者:

  1. 从对象中删除dataType属性,以便jQuery将使用HTTP Content-Type确定它是JSON 添加access control headers以允许您的网站访问其他域
  2. 上的数据
  3. 返回JSON-P而不是JSON

答案 1 :(得分:0)

好的问题出在JSONP数据中,当您发送请求时,JSON响应会发送响应

callbackFunctionName(jsonData)

您没有这样的内容,因此您需要格式化代码,如下所示

$(document).ready(function() {
    $.ajax({
        type: 'GET',
        url: 'your cross domain file',
        dataType:'jsonp',
        crossDomain: 'true',
        jsonpCallback: 'MyCallback',
        async: true,
        success:function (data) {
            console.log(data);
        },
        error:function(data){
                console.log('error');
        }
    });

    function MyCallback(data) {  
    }

});

现在在响应中,数据需要格式化为

$data['response'] = 2;
header('Content-type: application/json');
$json_data =  json_encode($data);
echo "MyCallback" . '(' . $json_data . ');';

您现在可以检查您的控制台并查看数据是否正在通过

您可以在http://remysharp.com/2007/10/08/what-is-jsonp/

查看更多相关信息

答案 2 :(得分:-1)

将您的ajax更改为此代码:

<强>解决方案

            $.ajax({
                    type: 'GET',
                    url: cross-domain-url,
                    data:{ param1:'123', param2:'123' },
                    dataType:'JSON',
                    success:function (data) {

                                alert('success');
                  },
                 error:function(){
                       alert('error');
                  }
             });

希望它能奏效....