2012-01-10 22 views
1

私は突然非常に奇妙な "バグ"を得ました。これまでは、このスクリプトは魅力的に機能していました。しかし、突然、formData変数は、それが存在しないかのようにjQuery.ajaxに渡されません。jQuery.ajaxでの不思議な動作

私がalertのデータを表示すると、それはすべて機能します。しかし、私は警告を削除するとすぐに、formDataインデックスが存在しないことをPHPスクリプトが教えてくれます。

私はこれが発生したり、それを解決する方法をどのように無知だ: -/

これは私の開発サーバ上ではなく、本番サーバー上で正常に動作します。

jQuery('#btn_saveForm').live('click', function() { 
    var instance = 'update'; 
    var brand_id = jQuery('#itemID').val(); 

    // Get form data 
    var form_data = jQuery("#data_form").serialize(); 

    // alert(form_data); //If I uncomment this, the script works... 

    //Process form data 
    jQuery.ajax({ 
     url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
     data: { 
      instance : instance, 
      formData : form_data, 
      brandID : brand_id 
     }, 
     success: (function(feedback) { 
      showFeedback(feedback); 
     }), 
     dataType: 'json' 
    }); 
}); 
+0

これは野生の推測ですが、デベロッパーでは動作していますが、配布されていないと、サーバ上でMIMEタイプを設定する際に問題が発生することを示唆しています。 fiddlerやFirebugのNETタブで1つかもしれません。エラーを追加してみてください:function(e){}もブロックし、サーバー上のeに含まれているものを参照してください(もう一度、firebug経由で - VSは利用できません) – SpaceBison

+0

@SpaceBison - ありがとう。 FFのNETタブをチェックすると、実際にすべてのデータが送信されていることがわかります!しかし、呼び出されているPHPコードで 'print_r($ _ REQUEST)'を実行すると、 'instance'と' brandID'だけが表示されます。 – Steven

+0

@SpaceBison、PHPファイルが '$ _REQUEST ['formData']'を見つけられないので何も返されません。 – Steven

答えて

0

私の推測では、中alert()を置くことはAJAXリクエストが送信される前form_databrand_id変数が完全に充填することを可能にするということでしょう

+0

これは2つの異なるブラウザで同じです – Steven

1

その後、別のブラウザ/変更ブラウザを再起動して起こっていただきました!を参照してみてください。このことを念頭に置いて、これを試してみてください。

また
jQuery.ajax({ 
    url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
    data: { 
     instance : instance, 
     formData : jQuery("#data_form").serialize(), 
     brandID : jQuery('#itemID').val() 
    }, 
    success: (function(feedback) { 
     showFeedback(feedback); 
    }), 
    dataType: 'json' 
}); 

は、単にテストするために、あなたはそれが違いを作るかどうかを確認するためにAJAX呼び出しでasync: falseを設定することができます。それはあなたが(JSはシングルスレッドであるとして、非常に奇妙なことと思われる)ここにいくつかのレースを持っていることは事実だ場合

+0

Rory McCrossan、私は両方のソリューションを試しました。スクリプトは私のローカルコンピュータと私のdevサーバ上で正常に動作しますが、私のprodサーバでは動作しません。私はsomコードの変更を行う前に私は働いていましたが、私はこのコードを変更しませんでした。 – Steven

+0

PS。 @SpaceBisonへの私のコメントを参照してください – Steven

+0

私が 'serializearray'を使用すると、私はこのエラーが発生しないことを発見しました。それ以上のヒントがあれば教えてください:) – Steven

0

、次はあなたを助ける必要があります。

setTimeout(function() { 
    jQuery.ajax({ 
     url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
     data: { 
      instance : instance, 
      formData : form_data, 
      brandID : brand_id 
     }, 
     success: (function(feedback) { 
      showFeedback(feedback); 
     }), 
     dataType: 'json' 
    }) 
}, 0); 

0タイムアウトの建設はあなたのコードを配置します実行キューの終わりに。

+0

にはanny効果がありませんでした。 1000に設定してください。 – Steven

関連する問題