1

を使用しているときに、この奇妙なエラーに直面してい$.postます。

作品

$("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
        alert(data);
                    $('#loader').hide();        
    });
});

上記のコードは、php ファイルを使用して受け取った json 配列を示しています。また、titleここにフィールドを表示し、ローダー イメージを非表示にしています。

しかし、 Ialert(data.title)の場合、 undefined と表示されます。さらに、データ型「json」を に追加すると$.post

動作しません

$("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
        alert(data);
                    $('#loader').hide();        
    }, "json"); //Added datatype here.
});

これは何も警告せず、ローダー イメージを隠しません。私も試しましたが、

$("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
        jQuery.parseJSON(data);
                    alert(data.title);
                    $('#loader').hide();        
    });
});

上記のものも何も警告せず、ローダーを隠しません。そして、何もしなかったこれも試しました。

$("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
        jQuery.parseJSON(data);  //tried without this too.
                    alert(data['title']);
                    $('#loader').hide();        
    });
});

最も奇妙なことは、2番目のスクリプト(4つのうち)で示したように、以前にjsonを使用したことがあり、それが正常に機能することです。私の JS コンソールにもエラーや警告は表示されません。ここで何が間違っていますか?データのタイトル フィールドにアクセスするにはどうすればよいですか?

これが役立つ場合、json配列を送信する方法は次のとおりです。

$json = array("title" => $title, "embed" => $embed, "desc" => $desc, "duration" => $duration, "date" => $date);
print_r(json_encode($json));

誰かがエラーを指摘して、スクリプトが失敗する理由を教えていただければ幸いです。他のjsファイルでも同様の機能が機能しました。

これがサーバーから返された私のデータです。

{"title":"Sunn Raha Hai Na Tu Aashiqui 2 Full Song With Lyrics | Aditya Roy Kapur, Shraddha Kapoor","embed":"\r\t\t\t\t\t\r\t\t\ t\t\t</param></param>\r\t\t\t\t\t</param>\r\t\t\t\t\t\r\t\t\t\ t\t</embed></object>","desc":"T-Series Films & Vishesh Films がプロデュースした映画「Aashiqui 2」の歌詞付きの全曲「Sun Raha Hai Na Tu」を紹介します。 Aditya Roy Kapur と Shraddha Kapoor が Ankit Tiwari の声で出演。\n\n歌: SUNN RAHA HAI\n歌手: ANKIT TIWARI\n音楽監督: ANKIT TIWARI\nアシスタント ミックス エンジニア - MICHAEL EDWIN PILLAI\nミックスとマスタリングは ERIC PILLAI が担当 (FUTURE SOUND OF BOMBAY)\n歌詞:SANDEEP NATH\n映画: AASHIQUI 2\nプロデューサー: BHUSHAN KUMAR KRISHAN KUAMR プロデューサー: MUKESH BHATT
\n監督: MOHIT SURI\n音楽レーベル: T-SERIES\n\niTunes から購入 - https://itunes.apple.com/in/album/aashiqui-2-original-motion/id630590910?ls=1\n\nお楽しみください&私たちとつながり続けてください!! \n\nT シリーズ チャンネルに登録して無制限のエンターテイメントを楽しみましょう\nhttp://www.youtube.com/tseries\n\nG+ でサークルに参加してください\nhttp://www.google.com/+tseriesmusic\n\nFacebook で「いいね」を押してください\nhttp://www.facebook.com/tseriesmusic\n\nフォローしてください\nhttp://www.twitter.com/_Tseries","duration":"391","date":"2013-04-03" }

編集

これは突然機能しました.. :o

  $("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
            alert(data.desc);
            console.log(data.desc);
            $("#loader").hide();

    }, "json");
});
4

3 に答える 3

0

コメントで、この AJAX は YouTube API に対応していると述べています。

YouTube のブログは 2012 年にCORSをサポートすると発表しました。CORSはサーバー側のヘッダー フラグを使用し、互換性のあるブラウザーは、ブラウザーのセキュリティSame-Origin-Policyによって禁止されるリクエストを許可すると解釈します。

あなたが言うように、最初の例が機能したと仮定すると、最初の問題は「なぜ(後続の)alert(data.title)失敗したのですか?(私の編集)」でした。alert(data.title)コンソールに入力すると、 scopeofdataがパラメーターとして定義されているコールバック関数であり、グローバル スコープでは定義されていないため、失敗しますdatadata何らかの形でに戻そうとしても、データがフェッチされる前にすぐに戻り、リクエストをキューに入れ、応答を処理するために指定したコールバック関数を設定するだけな global scopeので、未定義のままになる可能性があります。$.post

$.post dataTypeパラメータを明示的に に設定する 2 番目の例は、ベースの API'json'では失敗する可能性があります。なぜなら、 json の MIME タイプはのようにサーバーに送信することが許可されておらず、私が知る限り単純なリクエストしか実行しないからです。プリフライトなし。正しく適用されれば、より複雑なリクエストを実行できる可能性があります。 CORSContent-Type:simple CORS request$.post$.ajax

使用し続けるための回避策$.postは、期待されるデータ型として使用せずjson、リクエストをフォーム データとして送信することです。サーバーは、API がそれが起こると言っている場合、いずれにせよ json を送り返すことがあります。これは、コードのテスト中に確認できます。

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORSから

簡単なリクエスト

単純なクロスサイト リクエストは、次のようなものです。

GET、HEAD、または POST のみを使用します。

POST を使用してサーバーにデータを送信する場合、HTTP POST 要求でサーバーに送信されるデータの Content-Type は、application/x-www-form-urlencoded、multipart/form-data、または text/plain のいずれかです。 .

で許可されるapplication/jsonもののリストを作成しなかったことに注意してください。Content-Typesimple CORS request

CORS POST リクエストはプレーンな JavaScript から機能しますが、jQuery では機能しないのはなぜですか?も参照してください。

于 2013-08-18T04:32:12.283 に答える
-1

ajaxを次のように使用します

$.ajax({
url:url,
type:'post',
dataType:'json',
success:callback
})

このタイプを使用すると、低レベルで多くのパラメーターを設定できます。datatype 属性を使用すると、jQuery はJSONデータを解析し、コールバック関数として送信します。

于 2013-08-17T18:18:21.050 に答える