jQuery の $ajax の質問です。


補足コードは $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
よろしくお願いします。


---追記---
コメントを頂きましたので、環境をコメントに追記しました。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/11/02 21:42:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:appfb

質問者から

appfb2013/11/02 11:36:42
<!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>

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント100pt

ところで、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 パラメータを指定するように見直してください。

他1件のコメントを見る
id:a-kuma3

目指しているのはインクリメント検索で、今回は[ id="ajaxSave" ]の値が必要です。

コメントに書いたコードで、期待した動作をしてますか?

    var q = $("#ajaxFired").val();  //挿入した行

id="ajaxSave" の <input> の value を渡したいのだと思うので、以下のような感じになると思うのですけれど。

    var q = $("#ajaxSave").val();
2013/11/02 21:12:26
id:appfb

二度手間お手数おかけしますm(_ _)m
リダイレクトできたので希望通りと書きましたが、実際に検索結果を表示させてみると『あれ?あれ?おかしいな~~~』となり、先ほど間違いに気づきました。
凡ミスでした(^_^;)

今回いい勉強になりました。
ありがとうございます。

2013/11/02 21:41:56

その他の回答0件)

id:appfb

質問者から

appfb2013/11/02 17:12:17

質問文を編集しました。詳細はこちら

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント100pt

ところで、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 パラメータを指定するように見直してください。

他1件のコメントを見る
id:a-kuma3

目指しているのはインクリメント検索で、今回は[ id="ajaxSave" ]の値が必要です。

コメントに書いたコードで、期待した動作をしてますか?

    var q = $("#ajaxFired").val();  //挿入した行

id="ajaxSave" の <input> の value を渡したいのだと思うので、以下のような感じになると思うのですけれど。

    var q = $("#ajaxSave").val();
2013/11/02 21:12:26
id:appfb

二度手間お手数おかけしますm(_ _)m
リダイレクトできたので希望通りと書きましたが、実際に検索結果を表示させてみると『あれ?あれ?おかしいな~~~』となり、先ほど間違いに気づきました。
凡ミスでした(^_^;)

今回いい勉強になりました。
ありがとうございます。

2013/11/02 21:41:56
  • id:Lhankor_Mhy
    一応確認なのですが、クロスドメイン制限に引っ掛かっているわけではないですよね?
  • id:appfb
    コメントありがとうございます。
    クロスドメイン制限という単語は初めて知りました。
    クロスドメイン制限についていろいろ調べてみますが、自分の環境が当てはまらないと思いますが一応念のため環境を書いておきます。
    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
    <<
    これって関係あるでしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません