【问题标题】:Cross Domain jQuery Ajax call - Syntax missing error跨域 jQuery Ajax 调用 - 语法缺失错误
【发布时间】:2014-01-23 09:14:32
【问题描述】:

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

PHP:网络服务响应

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

jQuery Ajax 调用:

$.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 并继续我的实现。

【问题讨论】:

  • 必须有一个文件名和行号与错误一起打印。这可能会帮助您调试。可以查一下吗?
  • 检查一下:stackoverflow.com/questions/19456146/… 你必须正确构建 JSON
  • @Pulkit:谢谢。我已经检查了文件。仅包含 "{"ResultCode":2}"。它在第 13 个字符上显示错误。那是“:”。
  • 如果您想对数据进行编码,为什么要使用 header(),因为它会在 ajax 成功时响应您,其次您会错过 ';'脚本中的操作员请提供行号并首先直接点击您的跨域网址
  • 你的跨域 url 的输出是什么?我的意思是它会产生有效的 json 吗?

标签: php jquery ajax


【解决方案1】:

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

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

要么:

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

【讨论】:

  • 感谢您的尝试。 1.这是一个跨域相关的问题。没有数据类型我无法收到响应。 2. webservice响应中无法返回JSON-P。
  • 1.您需要实施整个解决方案,而不仅仅是前半部分。服务器必须输出 HTTP 标头,授予浏览器中的 JS 从另一个站点读取它的权限。 2.那么你必须使用解决方案1。
  • 如何提供访问控制标头。请指教。
  • 我在webservice中添加了以下代码。但还是一样。 header('内容类型:应用程序/json'); header("访问控制允许来源:*"); echo json_encode($data);
  • 应该可以。查看浏览器的开发者工具。 JavaScript 控制台是否报告任何错误? Net 选项卡是否显示正在发送的 HTTP 请求和返回的响应?他们是正确的吗?状态码OK吗?
【解决方案2】:

好的,问题出在 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/

【讨论】:

  • 查看其他答案的 cmets。 OP 已声明他们无法发送 JSON-P 响应。
【解决方案3】:

将您的 ajax 更改为以下代码:

解决方案

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

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

希望它会起作用....

【讨论】:

  • 删除 if (data[0].ResultCode) 部分并再次检查...请
  • 我得到了同样的回应.. 请理解。这是一个跨域问题。 JSON 适合吗?
  • 数据格式无关紧要。我在回答中提到的访问控制标头确实如此。
猜你喜欢
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
相关资源
最近更新 更多