1

クロスドメイン POST リクエストを実装する必要があります。このコードを使用すると、同じドメインですべてが正常に機能しました。しかし、バックエンドを別のドメインに移動すると、すべてが機能しなくなりました! したがって、タイプミスがある可能性があります。エラーがクロスドメイン要求に関連している場合にのみ存在する可能性があります。ajax と JSONP を使用して POST リクエストを送信してみます。

function requestToServer(url, success, myObjects) 
{
    $.ajax({
        type: "POST",
        crossDomain: true,
        dataType: 'jsonp',
        jsonp: 'jsonp_callback',
        url: url,
        data: "arrObjects=" + JSON.stringify(myObjects),
        success: function(data)
        {
            success(data);
        },
        error: function()
        {
            alert('Server connection error!!!');
        }
    });
}

およびサーバー スクリプトで、データを送信します。

<?php

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type');

include 'connection.php';

$arrObjects = json_decode($_POST['arrObjects']);


$title = $arrObjects->title;
$msg = $arrObjects->msg;
$lat = $arrObjects->lat;
$lon = $arrObjects->lon;

$query = "INSERT INTO `geo_markers` (`id`, `title`, `description`, `lat`, `lon`) 
VALUES (NULL, '{$title}', '{$msg}', '{$lat}', '{$lon}')";

$res = mysqlQuery($query);

echo $_GET['jsonp_callback'].'({"success":true});';

mysql_close();
?>

しかし $_POST は空です。しかし、$_GET は値 $_POST を取ります。var_dump を使用して $_POST を確認すると、array(0) であり、$_GET にはすべての送信データが含まれています。

ここで何が問題なのですか?何がうまくいかなかったのですか?

4

3 に答える 3

3

jsonp POST リクエストを作成することはできません。jsonp は GET でのみ実行できます。これが、すべてのデータが $_GET にある理由です。

于 2013-01-27T07:39:53.463 に答える
3

JSONP は POST リクエストでは動作しません。JSONP は、必要に応じて、渡されたデータを使用してコールバック関数を呼び出すスクリプトを少し生成して、URL を含むスクリプト タグを生成する呼び出し元によって機能します。真のクロスドメイン投稿が必要な場合は、OPTIONS リクエストを処理するためのクロスオリジン リソース共有 (CORS) 機能を実装する必要があります ( http://remysharp.com/2011/04/21/getting-corsのように) -working/、しかし、私はそれを完全にスキャンすることさえしなかったことを告白します。

于 2013-01-27T07:40:27.353 に答える
2

jsonp 形式を使用しているため、JSON 形式で送信しました。データの前にjson_encodeを試してくださいecho

また、クロス ドメイン jsonp 呼び出しを行う場合、JSONP は AJAX ではなく、単なる動的スクリプト要素であることに注意してください。動的スクリプト要素で POST を実行することはできません。POSTデータを置く場所がありません。したがって、GETメソッドを使用する必要があります。

また、以下の形式を使用できることにも注意してください

$.getJSON(url + "?callback=?", null, function(data) {

});

続きを読む

于 2013-01-27T07:37:04.157 に答える