5

私はこの問題に頭を悩ませようとしています。非常に単純な jQuery ajax 呼び出しを使用して、データベースから値を取得し、いくつかの選択要素にその値を入力します。すべてが JSON として返されます。ほとんどのブラウザーでシームレスに動作しますが、クライアントは、クライアントもクライアントも結果を見ていないと報告しています。

コードが実行されていることを確認するために、途中でいくつかの Console.log() コマンドを追加しました。問題の URL への ajax GET が機能する場合もあれば、STILL が 200 OK を返す場合もありますが、コードは単にそれ以上実行されず、エラー コールバックに ajax エラー メッセージは表示されません。

これが私が使用しているコードです。一部のブラウザが窒息する可能性がある明らかな何かを誰かが見つけることができますか? もしよろしければ、次の点をご指摘いただけますと幸いです。

        var $j = jQuery.noConflict(true);
        $j(document).ready(function(){
            //console.log("jQuery has loaded");
            //console.log("attempting to load country list via AJAX call now");
            $j.ajax({
                url: 'http://www.topplaces.co.za/templates/seb_one/positions/search_establishments_filter/search/db.php?q=countries&rand='+Math.random(),
                success: function(data){
                    //console.log("Successfully got country list, going to populate the dropdown now");
                    if(data.length){
                        $j("#country").children("option:not(:first)").remove();
                        $j("#country").attr("disabled", false);
                        $j.each(data, function(resultIndex, result){
                            var o = new Option();
                            $j(o).html(result.country).val(result.country);
                            $j("#country").append(o);
                        })
                        //console.log("Country list should be populated now?");
                    }
                },
                error: function (xhr, ajaxOptions, thrownError){
                    //console.log(xhr.responseText);
                    console.log(thrownError);   
                },
                dataType: 'json',
                cache: false
            })

            $j("#country").live('change', function(){
                var id = $j(this).val();
                if(id == ""){
                    $j("#province").attr("disabled", "disabled");
                    $j("#town").attr("disabled", "disabled");
                    return false;
                }
                $j.ajax({
                    url: 'http://www.topplaces.co.za/templates/seb_one/positions/search_establishments_filter/search/db.php?q=provinces&c='+id+'&rand='+Math.random(),
                    success: function(data){
                    if(data.length){
                        $j("#province").children("option:not(:first)").remove();
                        $j("#province").attr("disabled", false);
                        $j.each(data, function(resultIndex, result){
                            var o = new Option();
                            $j(o).html(result.province).val(result.province);
                            $j("#province").append(o);
                        })
                    }
                },
                dataType: 'json',
                cache: false
                })
            });

            $j("#province").live('change', function(){
                var id = $j(this).val();
                if(id == ""){
                    $j("#town").attr("disabled", "disabled");
                    return false;
                }
                $j.ajax({
                    url: 'http://www.topplaces.co.za/templates/seb_one/positions/search_establishments_filter/search/db.php?q=towns&p='+id+'&rand='+Math.random(),
                    success: function(data){
                    if(data.length){
                        $j("#town").children("option:not(:first)").remove();
                        $j("#town").attr("disabled", false);
                        $j.each(data, function(resultIndex, result){
                            var o = new Option();
                            $j(o).html(result.town).val(result.town);
                            $j("#town").append(o);
                        })
                    }
                },
                dataType: 'json',
                cache: false
                })
            });

        })

コンソールがないため、クライアントが IE でエラー メッセージを受け取っていたという純粋な事実のために、Consol.log コマンドをコメントアウトしました。

編集:これが同じドメインリクエストであり、したがって同じオリジンポリシーに従うことを言及できませんでした

完全なサイトはここにあります: http://www.topplaces.co.za/ 右側には、国で始まり、Province が選択されるまで AJAX 呼び出しを開始する動的選択グループがあります。問題は、多くの人が国は彼らにとって負荷がないと言っています...

敬具、サイモン

4

3 に答える 3

4

サーバー アプリケーションが常に有効な JSON オブジェクトを返すかどうかを確認してくださいdataType: 'json'。この場合、errorの代わりに function が実行されますsuccess

パラメータを削除dataTypeして何が起こるかを確認し、受信データを解析してみてください$.parseJSON()- JSON が無効な場合は例外がスローされます。

于 2012-04-25T13:04:35.993 に答える
2

私はあなたのサイトを試しましたが、州がロードされていません. Json は空です。私はphpに直接アクセスしようとしましたが、それも空を返します。スクリプトを確認しましたか?

http://www.topplaces.co.za/templates/seb_one/positions/search_ Establishments_filter/search/db.php?q=provinces&c=Zambia&rand=0.12686952343210578&_= 1335360594228 という URL

これはパラメータです。

q:provinces
c:Zambia
rand:0.12686952343210578
_:1335360594228

Json 結果: []

それは本当にランダムなので、jsonを返さないのはphpスクリプトだと思います。

于 2012-04-25T13:36:47.393 に答える
0

また、ajax 呼び出しから返された json でこのブラウザーの問題が発生しました。問題は、IE と比較して Firefox で返されたデータのさまざまな部分を調べなければならなかったことです。Firefoxの場合、jsonを見つけるために使用する必要data.textがあったためです:undefineddata.documentElement.firstChild

var list = typeof data.text === 'undefined' ? jQuery.parseJSON(jQuery(data.documentElement.firstChild).text()) : jQuery.parseJSON(data.text);
于 2012-04-25T13:17:05.950 に答える