補足コードは $ajax から戻ってきたときリダイレクトするか?単なるテストコードですが希望通りリダイレクトしません。
[ $('#ajaxFired').html('Saved: ' + $(self).val()); ]は動いているので setTimeout 内には入っているみたいです。
また、試しに[ location.href=url+ "?fbid=" +fb_id; ]を[ $('#ajaxFired').html('Saved: ' + $(self).val()); ]直下に記述してみたのですが希望通りリダイレクトしますので、URLなどの間違いではありません。
<{$ajax_devserrch_url}>もSmartyテンプレートに出力された中身を何度も確認していますのでこれも間違いありません。
どうも、$ajax が問題のような気がします。
しかし、$ajax は別な場所にコピペで記述した同じものはきちんと動いています。
$ajax は <body> や <head> 内に書かなければならないなどルールはありますか?
使用しているモジュールは jQuery Text Change Event
http://zurb.com/playground/jquery-text-change-custom-event
よろしくお願いします。
---追記---
コメントを頂きましたので、環境をコメントに追記しました。
ところで、IE10のF12で以下のようなメーッセージが出てきます。
SCRIPT65535: オブジェクトの呼び出しが無効です
jquery.min.js, 行 5 文字7816これって関係あるでしょうか?
あります。
Ajax でリクエストを出す前にエラーが出ているので、success にも error にも制御が渡りません。
エラーの原因になっているのは、ここ。
$.ajax('/cgi-bin/b.rb',{
type: 'post',
url: '<{$ajax_devserrch_url}>',
data: {fbid:fb_id, query:self},
success: function(data){
location.href=url+ "?fbid=" +fb_id;
},
self がオブジェクトなので、訳が分からないことになってます。
data: {fbid:fb_id},
というふうに、パラメータ query を削ったり、
data: {fbid:fb_id, query: "foo-bar"},
このように明示的に文字列を渡せば、エラーにならず、別ページに遷移します。
質問からは、パラメータ query に何を渡すのかは判断できませんが、文字列として query パラメータを指定するように見直してください。
<!DOCTYPE html> <html lang="ja"> <head> <{$content_type|smarty:nodefaults}> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" src="../js/textchange/jquery.textchange.min.js"></script> </head> <body> <div class="wrap"> <input id="ajaxSave" type="text" name="qKey" value="<{$query}>" size="25"> </div> <div id="ajaxFired" class="wrap"></div> <{if $quiz}> <{foreach item=item from=$quiz}> <div class="qQuestion"><{$item.quiz_question|escape:"html"}></div> <{/foreach}> <{/if}> </body> <script type="text/javascript"> // aJaxセーブ var timeout; $('#ajaxSave').bind('textchange', function () { clearTimeout(timeout); $('#ajaxFired').html('Typing...'); var self = this; var fb_id = '<{$fb_id}>'; var url = '<{$devuser_index_url}>'; timeout = setTimeout(function () { $('#ajaxFired').html('Saved: ' + $(self).val()); $.ajax({ type: 'post', url: '<{$ajax_devserrch_url}>', data: {fbid:fb_id, query:self}, success: function(data){ location.href=url+ "?fbid=" +fb_id; }, error: function(jqXHR, status, error){ location.href=url+ "?fbid=" +fb_id; } }); }, 1000); }); </script> </html>
質問文を編集しました。詳細はこちら。
クロスドメイン制限という単語は初めて知りました。
クロスドメイン制限についていろいろ調べてみますが、自分の環境が当てはまらないと思いますが一応念のため環境を書いておきます。
Xサーバーの仮想sslを利用し、自分のドメインをabc.comとすると、
>>
<{$devuser_index_url}>は
https://abc-com.ssl-xserver.jp/devuser_index.php
<{$ajax_devserrch_url}>は
https://abc-com.ssl-xserver.jp/ajax_devsearch.php
<<
また、facebookのiframe内で使用するアプリですが、現在はhttps://abc-com.ssl-xserver.jp/に直接アクセスして動作確認をしています。
ところで、IE10のF12で以下のようなメーッセージが出てきます。
>>
SCRIPT65535: オブジェクトの呼び出しが無効です
jquery.min.js, 行 5 文字7816
<<
これって関係あるでしょうか?