简体   繁体   中英

Cross-domain AJAX request error on HTTP 200

I'm writing a very basic Facebook app, but I'm encountering an issue with cross-domain AJAX requests (using jQuery).

I've written a proxy page to make requests to the graph via cURL that I'm calling via AJAX. I can visit the page in the browser and see it has the correct output, but requesting the page via always causes jQuery to fire the error handler callback.

So I have two files:

Proxy, which does the cURL request

<?php
//Do some cURL requests, manipulate some data
//return it as JSON
print json_encode($data);
?>

The facebook canvas, which contains this AJAX call

$.getJSON("http://myDomain.com/proxy.php?get=stuff", 
          function(JSON)
          {
              alert("success");
          })
          .error(function(err)
          {
              alert("err");
          });

Inspecting the call with Firebug shows it returns with HTTP code 200 OK , but the error handler is always fired, and no content is returned. This happens whether I set Content-Type: application/json or not .

I have written JSON-returning APIs in PHP before using AJAX and never had this trouble.

What could be causing the request to always trigger the error handler?

Recently I experienced the same issue and my problem was the fact that there was a domain difference between the webpage and the API, due to the SSL.

The web page got a HTTP address (http://myDomain.com) and the content I was requesting with JQuery was on the same domain but HTTPS protocol (https://myDomain.com). The browser (Chrome in this case) considered that the domains were differents (the first one with HTTP , the second one with HTTPS ), just because of the protocol, and because the request response type was "application/json", the browser did not allowed it.

Basically, the request worked fine, but your browser did not allowed the response content.

I had to add a " Access-Control-Allow-Origin " header to make it work. If you're in the same case, have a look there: https://developer.mozilla.org/en/http_access_control .

I hope that'll help you, I got a headache myself.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM