Pregunta

I'm having a heck of a time building a simple API using JS and PHP. To start, I have utilized an example/solution on Script Tutorials Javascript cross-domain api for your website. The code works as expected on a standard browser; however, I'm stuck with IE7, in which the example doesn't work.

Any words of wisdom (other then not using Internet Exploder 7)?

Thanks in advance, Kate

-

As per epascarello suggestion I ended up with the following (this is a very dirty test version):

CLIENT-SIDE example from schock.net:

<html>
<script>
    function jsonpCallback(data){
        alert(data);
    }

    // Create a new script element
    var script_element = document.createElement('script');

    // Set its source to the JSONP API
    script_element.src = 'http://myserver.com/api.php?callback=jsonpCallback';

    // Stick the script element in the page <head>
    document.getElementsByTagName('head')[0].appendChild(script_element);   
</script>
</html>

SERVER-SIDE example from www.geekality.net:

<?php 
header('content-type: application/json; charset=utf-8');

function is_valid_callback($subject)
{
    $identifier_syntax = '/^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*+$/u';

    $reserved_words = array('break', 'do', 'instanceof', 'typeof', 'case',
      'else', 'new', 'var', 'catch', 'finally', 'return', 'void', 'continue', 
      'for', 'switch', 'while', 'debugger', 'function', 'this', 'with', 
      'default', 'if', 'throw', 'delete', 'in', 'try', 'class', 'enum', 
      'extends', 'super', 'const', 'export', 'import', 'implements', 'let', 
      'private', 'public', 'yield', 'interface', 'package', 'protected', 
      'static', 'null', 'true', 'false');

    return preg_match($identifier_syntax, $subject) && !in_array(strtolower($subject), $reserved_words);

}

$data = array(1,2,3,4,5,6,7,8,9);
$json = json_encode($data);

# Verify JSON callback and respond
if (is_valid_callback($_GET['callback'])) 
    exit("{$_GET['callback']}($json)");

# Handle a bad request
header('status: 400 Bad Request', true, 400);

?>
¿Fue útil?

Solución

The answer is you can't do what you are doing with IE7 since it does not support CORS. You would need to use JSONP if you want to support that browser.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top