4

私は同じ問題の非常に多くの Q&A を読みましたが、特定の問題を抱えているものはありません (少なくとも私が見つけることはできませんでした)。

JSON文字列をエコーバックするphpスクリプトがあります

header('Content-Type: application/json');
echo $result;

JSON が返されました ( JSONLintでチェックされ、有効です):

{"Announcement":{"ID":1,"Type":1,"Text":"This is a test Albums announcement.","TimeStart":"1969-12-31","TimeEnd":"1969-12-31"}}

そして、json を読み取る web jquery スクリプト:

$.ajax({
        type : "GET",
        url : "http://b***s.net/S****s/GetAnnouncements.php?callback=?",
        data : {get_param : "Announcement"},
        dataType : "json",
        error : function(jqXHR, textStatus, errorThrown) {alert(errorThrown); alert(textStatus);},
        success : function(data) {alert('success');
            $.each(data, function(index, element) { alert('here');
                $("#announcements-list").append("<li><a id='announcements-a-" + element.ID + "' href='#announcement-details'><p>" + element.Type + ": " + element.Text + "</p></a></li>");
                $("#announcements-a-" + element.ID).bind('click', function() {Announcements.AnnouncementID = element.ID;});
            });
            $("#announcements-list").listview('refresh');
        }
    });

success:呼び出されることはありません。そしてをerror:返しますtextStatusとは"parsererror"errorThrown"Error: jQuery1830649454693285679_1359620502896 was not called"

  • callback=?クロスドメインの問題を回避するために、URL に追加しました。
  • PHPに送信header('Content-Type: application/json');しましたが、HTMLが返されません。
  • JSONLintで JSON の有効性を確認しました
  • いくつかの回答が言うようにを削除しようとしましdata: "json"たが、それでも返されますparsererror
  • jQuery 1.8.3 の使用
4

2 に答える 2

4

サーバー スクリプトとクライアント スクリプトが互いに補完し合っていません。次の 2 つのオプションがあります。


サーバー側スクリプトが JSON を返すようにします。

Content-Type: application/json

{"Announcement":{"ID":1}}

コールバック パラメータを省略します。

$.ajax({
    type : "GET",
    url : "http://example.com/feed/json.php",
    dataType : "json"
});

サーバー側のスクリプトが JSONP を返すようにします。つまり、JSON をコールバック関数でラップします。

Content-Type: application/javascript

jQuery_xxxxxxxx({"Announcement":{"ID":1}});

データ型を jsonp に変更します。

$.ajax({
    type : "GET",
    url : "http://example.com/feed/json.php",
    dataType : "jsonp"
});

jQuery は&callback=jQuery_xxxxxxxx、そのようなリクエストの URL にサイレントに追加することに注意してください。サーバーは、URL で指定されたコールバック名を使用する必要があります。次のようなことができます。

echo sprintf(
    "%s(%s);",
    isset($_GET["callback"]) ? $_GET["callback"] : "void",
    json_encode($data)
);
于 2013-01-31T09:02:40.153 に答える
2

私は試してみましたが、これがクロスドメインでテストされたソリューションです

$.ajax({
    type : "GET",
    url : "http://******/14621356.php",
    data : {get_param : "Announcement"},
    dataType : "jsonp",
    error : function(jqXHR, textStatus, errorThrown) {alert(errorThrown); alert(textStatus);},
    success : function(data) {alert('success');
        $.each(data, function(index, element) { alert('here');
            $("#announcements-list").append("<li><a id='announcements-a-" + element.ID + "' href='#announcement-details'><p>" + element.Type + ": " + element.Text + "</p></a></li>");
            $("#announcements-a-" + element.ID).bind('click', function() {Announcements.AnnouncementID = element.ID;});
        });
        $("#announcements-list").listview('refresh');
    }
});

そしてphpの場合

header('Content-Type: application/json');
echo $_GET['callback'].'('.'{"Announcement":{"ID":1,"Type":1,"Text":"This is a test Albums announcement.","TimeStart":"1969-12-31","TimeEnd":"1969-12-31"}}'.')';

dataType の jsonp に注意してください。

于 2013-01-31T09:14:20.553 に答える