Data json yang dikembalikan dengan memuat naik fail akan digesa untuk memuat turun kemahiran solution_javascript masalah

WBOY
Lepaskan: 2016-05-16 16:29:28
asal
1417 orang telah melayarinya

Dalam projek baru-baru ini, data json yang dikembalikan dengan memuat naik fail akan digesa untuk memuat turun Masalah ini hanya berlaku dalam IE10. Bahagian hadapan menggunakan ajaxForm pemalam jQuery untuk menyerahkan borang, dan format data yang dikembalikan oleh latar belakang ialah json. Kodnya adalah seperti berikut:

Ular Sawa Bahagian Belakang:

Salin kod Kod adalah seperti berikut:

def jsonp(func):
"""Membungkus output JSONified untuk permintaan JSONP."""
@wraps(func)
def decorated_function(*args, **kwargs):
​​​​ panggil balik = request.args.get('callback', False)
Temp_content = func(*args, **kwargs)
           jika isinstance(temp_content, dict):
              temp_content.setdefault('berjaya', Benar)
                temp_content.setdefault('code', 200)
            cuba:
                 temp_content = json.dumps(temp_content, indent=4)
              kecuali UnicodeDecodeError:
                  cuba:
                   temp_content = ujson.dumps(temp_content)
                   kecuali StandardError sebagai e:
Logger.exception(e)
                  temp_content = json.dumps({'success': False, 'code': 500, 'info': 'INVALID_CONTENT'})
             temp_content = cgi.escape(temp_content)
              jika panggil balik:
                    # Berdasarkan http://evilcos.me/?p=425, jsonp menambah /**/Kepala akan lebih selamat
kandungan = '/**/' str(panggilan balik) '(' temp_content ')'
                mimetype = 'application/javascript'
pengepala = {'charset':'utf-8'}
                  kembalikan current_app.response_class(content, mimetype=mimetype, headers=headers)
             lain:
                mimetype = 'application/json'
pengepala = {'charset':'utf-8'}
kandungan = temp_content
                  kembalikan current_app.response_class(content, mimetype=mimetype, headers=headers)
​​ elif isinstance(temp_content, basestring):
             temp_content = cgi.escape(temp_content)
               kembalikan temp_content
        lain:
               kembalikan temp_content
Kembalikan fungsi_hiasan
@mod.route('/patch/install.json', method=['POST'])
@jsonp
def patch_install():
Kembalikan {'data': 'data'}

Kod js bahagian hadapan:

Salin kod Kod adalah seperti berikut:

$('#form').ajaxSubmit({
URL : '/patch/install.json',
Taip : 'post',
Jenis Data: 'json',
iframe : benar,
Kejayaan: function(res) {
            // kod
}
});

Penyelesaian:
Adalah perlu untuk menukar format data yang dikembalikan oleh bahagian belakang kepada format teks/html, seperti berikut:

Salin kod Kod adalah seperti berikut:

def plain(func):
"""balut teks/ respons html"""
@wraps(func)
def _inner(*args, **kwargs):
          resp = func(*args, **kwargs)
          jika isinstance(resp, dict):
               resp.setdefault('berjaya', Benar)
                resp.setdefault('kod', 200)
               resp = json.dumps(resp)
              resp = cgi.escape(resp)
                return current_app.response_class(resp, mimetype='text/html', headers={'charset': 'utf-8'})
         elif isinstance(resp, basestring):
              resp = cgi.escape(resp)
                return current_app.response_class(resp, mimetype='text/html', headers={'charset': 'utf-8'})
        lain:
              balas respons
Kembali _dalam
@mod.route('/patch/install.json', method=['POST'])
@biasa
def patch_install():
Kembalikan {'data': 'data'}

Nota: Bahagian belakang contoh ini menggunakan Python Jika anda menghadapi masalah yang sama dalam projek, tukarkannya kepada bahasa yang sepadan

Untuk meringkaskan, sebenarnya, untuk menyelesaikan masalah ini, cukup letakkan dalam satu ayat: "Tukar format data yang dikembalikan oleh bahagian belakang kepada format teks/html"

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan