-2

我正在向另一个域执行简单的 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>

这是 sub.mydomain.com 上的 test.php 页面

<?
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!";
?>

它仍然返回一个语义问题。

有人可以告诉我出了什么问题吗?

4

2 回答 2

1

好吧,首先,JSONP 请求不能POST(仅GET)。但我倾向于假设 jQuery 忽略了无效的type. JSONP本质是一个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成功处理程序并将数据传入其中。

于 2013-05-01T11:05:07.940 回答
0

我认为您可能需要使用jquery postMessage 插件(或类似的插件,如果有的话)。很久以来我尝试过,但请检查您是否从要调用的服务器加载脚本(认为我尝试过并且过去失败了,但是嘿 - 它值得一击 - 如果确实如此,请报告)。

于 2013-05-01T11:06:40.507 回答