( ゜▽゜)/こんばんは!

今日jQueryいじってたら1.3.2で普通に動いてた
「郵便番号から住所を取得して表示する機能」
が何故か動かなくなってましてww

ちょっとハマったのでメモ。

動かなくなったコードはこんなかんじのコード!
$.getJSON( url, function(data){
	if(data && data.address){
		$('#address').val(data.address);
	}else{
		alert(alertmsg);
		return;
	}
} );

返ってくるjsonデータは
{addrjp:'東京都豊島区池袋'}
みたいな感じ。

いままではボタン押すと正常に動いていたんですが
jQuery1.4にしたらうんともすんとも言わなくなっちゃいましたw

FireBugで見ても特にエラーは出ておらず
結局jQuery1.4のソース見ることに。。。。

すると驚きの事実がw

jQuery 1.3.2
if ( type == "json" )
	data = window["eval"]("(" + data + ")");

jQuery 1.4
if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
	// Make sure the incoming data is actual JSON
	// Logic borrowed from http://json.org/json2.js
	if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
		.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
		.replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {

		// Try to use the native JSON parser first
		if ( window.JSON && window.JSON.parse ) {
			data = window.JSON.parse( data );

		} else {
			data = (new Function("return " + data))();
		}

	} else {
		throw "Invalid JSON: " + data;
	}

// If the type is "script", eval it in global context
}

ああああああああああ!w
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, "")))


受け取ろうとしたjsonは

{addrjp:'東京都豊島区池袋'}

はいシングルクォート駄目〜

1.4からはシングルクォート付きの
jsonを渡すとjsonだと思ってくれないようです・・・


jsonが不正だとその後のcallbackも呼んでくれないので
結局うんともすんともいわなかったんですね・・・

json渡す方を修正してデータを

{addrjp:"東京都豊島区池袋"}

にしたらうまくいきましたとさ


jQuery入門―魔法のJavaScriptリファレンス&サンプルjQuery入門―魔法のJavaScriptリファレンス&サンプル
著者:高橋 登史朗
販売元:秀和システム
発売日:2009-11
おすすめ度:5.0
クチコミを見る