1

誰が何が間違っているのか詳しく説明できますか? この時点で何を探すべきかについての本当の手がかりはありません。

サンプルコード:

$.ajax({
    url: uploader.fileupload('option', 'url'),
    context: uploader,
    success: function(response){
        //logging uploader
        console.log(uploader);
        //logging this --> logs the same as logging uploader
        console.log(this);
        //loggin response --> clearly shows a context attribute holding the correct data for this response
        console.log(response);
        //logging response.context --> shows undefined
        console.log(response.context)

        var done = uploader.fileupload('option','done');
        done.call(this, null, response);
    },
    dataType:"json"
})

$.ajax() 呼び出しでコンテキスト属性を操作することに慣れていないため、この機能が問題を引き起こしているのではないかと疑っています。

このスニペットは、ajax 呼び出しの後でコードに問題を引き起こします。元のajax-requestの実際のsuccess-callbackに問題がすでに存在しているため、これはASYNCの問題とは何の関係もないと確信しています。

送信されたphp-headersを無効にしましたが、同じままです。ヘッダーに何か問題がある可能性があることを意味する別のトピックに基づいてこれを試しました。$.ajax() の dataType 属性も無効にしましたが、応答が json として認識されません。

デバッグ方法に関するヘルプやヒントは大歓迎です!

更新: ajax-call でコンテキスト属性を削除すると、問題が解決します。しかし、console.logging() のときに応答オブジェクトに追加されるのはなぜですか (または少なくとも追加されているようです)

4

1 に答える 1

4

質問自体をより適切に指定する必要があるため、これがあなたの問題かどうかはわかりません。console.log()しかし、タイトルを見ると、非同期で参照渡しを行うという昔からある問題のようです。

オブジェクトを呼び出すとconsole.log(object)、オブジェクトは参照として保持され、すぐには印刷されません。しばらくして、実際にロギングが行われると、オブジェクトは別の状態になる可能性があります (たとえば、この場合のように、属性がある可能性があります)。

逆にobj.property、呼び出しをログに記録すると同期的であり、そのプロパティはまだ定義されていません。

于 2013-01-11T14:58:42.583 に答える