使用PHP服务返回有效的json和$ .ajax

时间:2014-01-31 10:29:42

标签: javascript jquery ajax json

我一直坚持使用PHP创建的Web服务,不知道我做错了什么..我在这里创建了一个小提琴示例:http://jsfiddle.net/e97AV/ 我已经尝试了各种组合的东西,但继续得到404未找到反馈,当我指定jsonp我没有得到错误消息,但在Web控制台我可以看到404错误..在浏览器中当我访问url时,它返回有效的json

我的问题是如何知道何时使用jsonp或json?此外,这些服务是从外部来源提供给我的,除了同意json被退回我怎么知道问题是在我身边还是他们的?

继承人ajax代码

baseUrl = "http://exclusivegetaways.co.za/api.php";
    $.ajax({ 
            type: "GET",
            url: baseUrl,
            data: {something : "something"},
            //contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {
                alert("works");
                alert(result);
            },
            error: function (a,b,cc) {
                alert(a+b+cc);
            }
        });

我以后能够从 ajax错误对象中提取json数据?像这样:

baseUrl = "http://exclusivegetaways.co.za/api.php?something=something";

$.ajax({ 
    type: "GET",
    url: baseUrl,
    dataType: "json",
    success: function (res) {
        alert("worked");
        //alert(res);
    },
    error: function(jqxhr) {
        try {        
            f = JSON.parse(jqxhr.responseText);
        ...valid json returned here

        } catch(err) {alert(err);}
    }
});

3 个答案:

答案 0 :(得分:0)

这是因为安全限制阻止了Ajax查询远程位置。

作为通过Ajax访问远程位置的解决方法,您可以在webApp(例如PHP)中构建自定义URL,该URL查询远程API并返回JSON。

然后,在您的JavaScript中,您通过Ajax调用此URL(来自您的应用程序)。

答案 1 :(得分:0)

首先:始终查看您的JavaScript错误控制台。

XMLHttpRequest cannot load http://exclusivegetaways.co.za/api.php?location=provinces.
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://fiddle.jshell.net' is therefore not allowed access. 

另见Ways to circumvent the same-origin policy


  

我尝试了各种各样的组合但继续获得404未找到反馈,当我指定jsonp时我没有收到任何错误消息,但在Web控制台中我可以看到404错误。在浏览器中,当我访问url时,它返回有效的json

这表明:

  • 他们不支持JSONP
  • 他们查看HTTP标头和404请求阻止从Ajax访问(这不是一个好方法,错误代码是误导性的)

  

我的问题是如何知道何时使用jsonp或json?

通常通过阅读您尝试使用的服务器的文档


  

此外,这些服务是从外部来源提供给我的,除了同意json被退回,我怎么知道问题是在我身边还是他们的?

通常通过使用API​​提供商提供的任何支持(即从他们的文档开始,然后回到他们提供的与人类通信的任何方式)。

答案 2 :(得分:-1)

由于Same Origin Policy,只有在以下情况下才允许您的ajax请求: 域名,应用层协议和(在大多数浏览器中)端口 运行脚本的HTML文档的编号是相同的

在您的情况下,应用层协议不同,这就是您的脚本失败的原因

可能的解决方案是:

  • JSONP,必须由服务器提供

  • CORS,这是一个更优雅的'和干净的解决方案,但尚未完全支持IE(IE7不支持它,IE8有一些限制)

Answer taken from this link