2013-05-01 1 views
-2

Я делаю простой запрос Ajax на другой домен, как это:не может сделать кросс-браузер запроса AJAX для работы

<script type="text/javascript"> 
$(function() { 
    $('.clik').click(function() { 
     $.ajax({ 
       type: "POST", 
       url: "http://sub.mydomain.com/test.php", 
       crossDomain: true, 
       dataType:"jsonp", 
       success: function(data) { 

        $('p.txt').html(data['no']); 

       } 

     }); 
    }); 
}); 
</script> 
</head> 

<body> 
<p class="clik">Halleluja</p> 
<p class="txt"></p> 

Это страница test.php на sub.mydomain.com

<? 
header('Access-Control-Allow-Origin: http://mydomain.com'); 
// Begin Session 
require_once('cl.session.php'); 
$session = new Session(); 
$session->start_session('test', false); 

// Access Database 
require_once('cl.database.php'); 
$login_db = new Database('user', 'pass', 'accounts', 'test'); 
$login_pdo = $login_db->PDO; 

include "fn.check_login.php"; 
if(checkLogin($login_pdo) == true) { 

    // We start out by checking if the request has been made using AJAX 
    if (is_ajax()) { 

     echo "this is working"; 

    } else { 

     echo "this is not working!"; 

    } 

} else { 
    echo 'You are not authorized to access this page, please login. <br/>'; 
} 

// Function to check if the request is an AJAX request 
function is_ajax() { 

    // BOOLEAN return if AJAX 
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'; 

} 
?> 

Он возвращает семантическую проблему.

Кроме того, если я просто эхо некоторые основной текст:

<? 
echo "Hello World!"; 
?> 

она по-прежнему возвращает семантическую проблему.

Может кто-нибудь сказать мне, что пошло не так?

+0

Не ответ, но короткие теги для php не рекомендуется. Всегда открывайте теги PHP как ' MatthewMcGovern

+0

Мой сервер Apache настроен для его поддержки, но я отвечу на ваш совет. – Dimser

+0

Ну, для начала запросы JSONP не могут быть 'POST' (только' GET'). Но я склонен предположить, что jQuery игнорирует недопустимый тип '. –

ответ

1

Ну, для начала просьбы JSONP не могут быть POST (только GET). Но я склонен предположить, что jQuery игнорирует недопустимый type. JSONP - по существу a GET.

Ваш ответ на него недействителен. Вы сказали jQuery, что вы ожидаете, что сервер предоставит ответ JSONP. но ваши ответы не являются JSONP.

JSONP реакция будет выглядеть примерно так:

callback({ 
    "property": "value", 
    "anotherProperty": 42 
}) 

... где имя функции обратного вызова (callback в выше) берется из строки запроса запроса. Так, например, если запрос был http://sub.mydomain.com/test.php?callback=foo, ответ будет использовать foo для имени обратного вызова:

foo({ 
    "property": "value", 
    "anotherProperty": 42 
}) 

JQuery добавит строку параметр callback= запроса к запросу для вас автоматически, и генерировать соответствующую функцию вы, который, в свою очередь, вызывает обработчик успеха ajax с данными, переданными в него.

+0

теперь говорится о проблеме. не может найти переменную: foo' – Dimser

+0

@PhilipJensBramsted: прочитайте ссылку на JSONP и прочитайте документацию [$ .ajax] (http://api.jquery.com/jQuery.ajax) относительно того, как это работает JSONP. Вы явно не указываете 'callback' в своем URL-адресе. Как я уже сказал выше, jQuery предоставит вам (и функцию) для вас. Ваш код на стороне сервера просто должен использовать параметр строки запроса callback и использовать это как имя функции. У него будет некоторое длинное, странное имя (потому что jQuery автоматически генерирует их и пытается избежать конфликтов). –

+0

Извините, сэр .. Я неправильно понял, что вы отвечаете .. Спасибо за ваше время .. Многому научился от этого. – Dimser

0

Думаю, вам может понадобиться использовать jquery postMessage plugin (или аналогичный, если таковой имеется). Долгое время с тех пор, как я попробовал, но проверьте, загрузите ли вы скрипт с сервера, который хотите позвонить (думаю, я пробовал это и провалился в прошлом, но hey - его стоит bash - отчитаться, если это произойдет).

Смежные вопросы