jqueryajaxパーサーエラーは呼び出されませんでした



Jquery Ajax Parsererror Was Not Called



例は次のとおりです。

$ .ajax({
url:_url
dataType: 'jsonp'、
jsonp: 'jsonpcallback'、
contentType: 'application / json'、
データ:{
'a.c': '0'、
'a.p': 'pass'、
'a.s':22、
'a.u': 'ユーザー'
}、
成功:関数(結果){
$( 'body')。unblock()
alert( '成功')
}、
error:function(xhr、ajaxOptions、thrownError){
$( 'body')。unblock()
alert(xhr.statusText)
alert(xhr.responseText)
alert(xhr.status)
alert(thrownError)
}
})



結果:parsererror、200、未定義、jQuery16404238360976138926_1344922361673は呼び出されませんでした

この問題を解決します



最初のエラー:parsererrorはパーサーエラーです、

jQuery15001997238997904205_1298484897373は呼び出されませんでしたjQuery150019 ...この関数は実装されていません。

では、なぜこの関数はそれと呼ばれないのですか?



jQuery15001997238997904205_1298484897373は、クロスドメインajax時に自動的に生成されるreasonの関数名ですが、どのようにクロスドメインですか? jsoncallback =? これはプラスであり、バックグラウンドコードは行のパラメータの値も返します。

そこにあるdataType、error、そして最初にjquery ajaxに慣れるための2つのコードは、どのように導入されていますか? (公式: api.jquery.com/jQuery.ajax )。

データ・タイプ

タイプ:文字列

サーバーから返される予期されるデータ型。指定しない場合、jQueryは、XMLMIMEタイプがXMLとして識別されたなどのインテリジェントHTTPMIME情報パケットに従って自動的に決定されます。 1.4では、JSONはJavaScriptオブジェクトを生成し、スクリプトはこのスクリプトを実行します。次に、サーバーは値の解決に基づいてデータを返し、コールバック関数に渡されます。利用可能な値:

  • 'Xml':利用可能なjQueryプロセスであるXMLドキュメントを返します。
  • 'Html':domを挿入するときに実行されるスクリプトタグに含まれるHTMLプレーンテキスト情報を返します。
  • 「スクリプト」:プレーンテキストのJavaScriptコードを返します。結果は自動的にキャッシュされません。 'cache'パラメータが設定されていない限り。注:リモートリクエスト(同じドメイン内にない)の場合、すべてのPOSTリクエストはGETリクエストに変換されます。 (ロードにDOMスクリプトタグを使用するため)
  • 'Json':JSONデータを返します。
  • 'Jsonp':JSONP形式。 'myurl?などのJSONP形式の呼び出し関数を使用する場合コールバック=? ' JQueryは自動的に?を置き換えますコールバック関数を実行するための正しい関数名。
  • 「テキスト」:プレーンテキスト文字列を返します

エラー

タイプ:機能

デフォルト:自動的に決定されます(xmlまたはhtml)。この関数は、リクエストが失敗したときに呼び出されます。

3つのパラメーターがあります。XMLHttpRequestオブジェクトのエラーメッセージ(オプション)例外オブジェクトのキャプチャ。

エラーが発生した場合、nullに加えて取得されるエラーメッセージ(2番目のパラメーター)は、「timeout」、「error」、「notmodified」、および「parsererror」の場合もあります。

これはAjaxイベントです。

トップの導入に精通している場合、パーサーエラーエラーはどのようにそれをトリガーしますか?実際、それはクロスドメインの問題に依存します。

まず、バックグラウンドコードがjsonファイルで返されることを確認しますか?ヘッドがjson形式で返された場合はどうなりますか?テキスト(通常はhtml)の場合、

したがって、パーサーはjson形式に変換されます。これは、定義したdataType: 'json'を取得できるため、変換プロセスでパーサーが失敗するだけでなく、jsonデータの場合に頻繁にリクエストされる可能性もあります。

したがって、解決策は

方法1:コードはバックグラウンドにある必要があり、データが返されるときに、返されるデータ形式が指定されます:(この方法が最適です)

context.Response.ContentType = 'application / json'
context.Response.ContentEncoding = System.Text.Encoding.UTF8

一方、標準のjsonに戻るには、{R:1}これは受け入れられません。jquery1.3バージョンが解決された後ではありません。

この仕事の{'R':1}。

背景ノーシチュエーションはプラスフォーマットを返します(デフォルトはhtmlになります)

バックグラウンドプラスフォーマットはjsonの後に戻り、戻り値はjsonです。 (図2上記のFirebugから切り取ったもの)

方法2:

success:function(data){
data
= JSON.parse(data)
// process data
},

添付ファイル:

注意点の評価JSON解析 (http://www.camnpr.com/archives/564.html)

jQuery16404238360976138926_1344922361673({'R':1、 'T':[{'I': 'B24B116B'、 'N': 'ダイニング'、 'F': '7'}、{'I': 'E040-A8C0E801798B' 、 'N': '公園エリア'、 'F': '6'}]})

復刻オリジナル: http://blog.csdn.net/baggio7095586/article/details/38421955

3番目の方法を追加します。

(以下はアクションstruts2処理コードです)コードのJsoncallback加算処理:

String jsonpcallback = StringUtil.handleNULL(request.getParameter( 'jsonpcallback'))
文字列outStr = ''
PrintWriter out = null
{を試してください
out = response.getWriter()
outStr = JSONObject.fromObject(info).toString(1、1)
} catch(IOException e){
// logger.error(e.getMessage()、e)
e.printStackTrace()
}
if(out!= null){
if(StringUtil.isNotEmpty(jsonpcallback)){
outStr = jsonpcallback + '(' + outStr + ')'
}
out.println(outStr)
out.flush()
out.close()
}

実際、デバッグ手法の問題は非常に重要であり、情報内のエラーをキャプチャすることは明らかです。