37

jQueryとjQueryUIをjquery-1.9.0.min.jsとjquery-ui-1.9.2.min.jsに更新しました

そして...すべての控えめなAjax呼び出し(Ajax.ActionLink、Ajax.BeginForm)が正しく機能しなくなりました-既存のdivを更新する代わりに、結果を新しいページで開きます。

そして、ページが読み込まれると、Firebugでこのjavascriptエラーが発生します。

ここに画像の説明を入力してください

もちろん、コードは変更されていません。Nugetを使用してjQueryスクリプトを更新しただけです。

誰もが同じ問題を経験しましたか?

4

8 に答える 8

71

更新:この問題は、最新の NuGet パッケージで修正されています。これを反映する別の回答を投稿しました。 https://stackoverflow.com/a/15539422/714309


jquery.unobtrusive-ajax.js、次の 4 行を見つけて置き換えます。

  1. $("a[data-ajax=true]").live("click", function (evt) {

    $(document).on("click", "a[data-ajax=true]", function (evt) {

  2. $("form[data-ajax=true] input[type=image]").live("click", function (evt) {

    $(document).on("click", "form[data-ajax=true] input[type=image]", function (evt) {

  3. $("form[data-ajax=true] :submit").live("click", function (evt) {

    $(document).on("click", "form[data-ajax=true] :submit", function (evt) {

  4. $("form[data-ajax=true]").live("submit", function (evt) {

    $(document).on("submit", "form[data-ajax=true]", function (evt) {

jquery.unobtrusive-ajax.min.jsWebGrease を使用して新しいものを生成することもできます。コマンド プロンプトからソリューション フォルダーに移動し、次のコマンドを入力します (プロジェクト フォルダーの名前は としますWeb)。

packages\WebGrease.1.3.0\tools\WG.exe -m -in:Web\Scripts\jquery.unobtrusive-ajax.js -out:Web\Scripts\jquery.unobtrusive-ajax.min.js
于 2013-01-24T23:32:32.053 に答える
42

Microsoft jQuery Unobtrusive Ajax NuGet パッケージを最新バージョンに更新します。

Visual Studio で、[ツール] メニューから [ライブラリ パッケージ マネージャー] を選択し、[パッケージ マネージャー コンソール] をクリックします。プロンプトで、次のように入力します。

Update-Package Microsoft.jQuery.Unobtrusive.Ajax

この問題は Microsoft jQuery Unobtrusive Ajax 2.0.30116.0 (2013 年 2 月 18 日月曜日) で修正され、.live()メソッドの呼び出し (jQuery 1.7 で廃止され、jQuery 1.9 から削除された) が推奨されるメソッドに置き換えられました.on()

于 2013-03-21T04:19:51.880 に答える
29

.live()は 1.7 以降非推奨であり、jQuery 1.9 で正式に削除されました.on()代わりに使用してください。これは、同じことを行う好ましい方法です

于 2013-01-18T03:19:29.047 に答える
10

jQuery の重大な変更に関する問題を修正する最も簡単な方法 (私の意見では) はjQuery.Migrate、バージョン 1.9.0 以降で削除された非推奨の関数呼び出しを使用できるようにするパッケージをインストールすることです。少なくとも控えめな ajax プラグインが Microsoft によって更新されるまでは。

また、目立たない ajax プラグインのナイトリー ビルドにより、API 呼び出しが更新されたようです。まだテストしていませんが、asp.net codeplex ページで取得方法を見つけることができます。

更新: Unobtrusive Ajax および Validation Nuget パッケージが更新されたため、jQuery.Migrateパッケージは不要になりました。

于 2013-02-13T19:03:43.587 に答える
4

また、これらの修正を行う必要があります:

jQuery.Validationプラグインを更新します(この問題を修正するため

https://nuget.org/packages/jQuery.Validation/1.11.0    (first available on nuget 2/4/13)

また、ファイルにこれらの変更を加えjquery.unobtrusive-ajax.jsます(接続の問題についてはこちらを参照してください) 。

Line 43: replace = container.attr("data-valmsg-replace") && $.parseJSON(container.attr("data-valmsg-replace")) !== false;

Line 73: replace = container.attr("data-valmsg-replace") && $.parseJSON(container.attr("data-valmsg-replace"));
于 2013-02-05T05:12:27.547 に答える
3

交換

.live(function)

.on(eventType, selector, function)

https://stackoverflow.com/a/14354091/358906

于 2013-01-18T03:31:18.980 に答える
1

これは、実際に機能するはずの実際の縮小ファイルです。とにかく私のために働きます。手動で編集しただけです。

    /*
** Unobtrusive Ajax support library for jQuery
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
(function(a){var b="unobtrusiveAjaxClick",g="unobtrusiveValidation";function c(d,b){var a=window,c=(d||"").split(".");while(a&&c.length)a=a[c.shift()];if(typeof a==="function")return a;b.push(d);return Function.constructor.apply(null,b)}function d(a){return a==="GET"||a==="POST"}function f(b,a){!d(a)&&b.setRequestHeader("X-HTTP-Method-Override",a)}function h(c,b,e){var d;if(e.indexOf("application/x-javascript")!==-1)return;d=(c.getAttribute("data-ajax-mode")||"").toUpperCase();a(c.getAttribute("data-ajax-update")).each(function(f,c){var e;switch(d){case"BEFORE":e=c.firstChild;a("<div />").html(b).contents().each(function(){c.insertBefore(this,e)});break;case"AFTER":a("<div />").html(b).contents().each(function(){c.appendChild(this)});break;default:a(c).html(b)}})}function e(b,e){var j,k,g,i;j=b.getAttribute("data-ajax-confirm");if(j&&!window.confirm(j))return;k=a(b.getAttribute("data-ajax-loading"));i=b.getAttribute("data-ajax-loading-duration")||0;a.extend(e,{type:b.getAttribute("data-ajax-method")||undefined,url:b.getAttribute("data-ajax-url")||undefined,beforeSend:function(d){var a;f(d,g);a=c(b.getAttribute("data-ajax-begin"),["xhr"]).apply(this,arguments);a!==false&&k.show(i);return a},complete:function(){k.hide(i);c(b.getAttribute("data-ajax-complete"),["xhr","status"]).apply(this,arguments)},success:function(a,e,d){h(b,a,d.getResponseHeader("Content-Type")||"text/html");c(b.getAttribute("data-ajax-success"),["data","status","xhr"]).apply(this,arguments)},error:c(b.getAttribute("data-ajax-failure"),["xhr","status","error"])});e.data.push({name:"X-Requested-With",value:"XMLHttpRequest"});g=e.type.toUpperCase();if(!d(g)){e.type="POST";e.data.push({name:"X-HTTP-Method-Override",value:g})}a.ajax(e)}function i(c){var b=a(c).data(g);return!b||!b.validate||b.validate()}a(document).on("click", "a[data-ajax=true]", function(a){a.preventDefault();e(this,{url:this.href,type:"GET",data:[]})});a(document).on("click", "form[data-ajax=true] input[type=image]", function(c){var g=c.target.name,d=a(c.target),f=d.parents("form")[0],e=d.offset();a(f).data(b,[{name:g+".x",value:Math.round(c.pageX-e.left)},{name:g+".y",value:Math.round(c.pageY-e.top)}]);setTimeout(function(){a(f).removeData(b)},0)});a(document).on("click","form[data-ajax=true] :submit", function(c){var e=c.target.name,d=a(c.target).parents("form")[0];a(d).data(b,e?[{name:e,value:c.target.value}]:[]);setTimeout(function(){a(d).removeData(b)},0)});a(document).on("submit","form[data-ajax=true]",function(d){var c=a(this).data(b)||[];d.preventDefault();if(!i(this))return;e(this,{url:this.action,type:this.method||"GET",data:c.concat(a(this).serializeArray())})})})(jQuery);
于 2015-08-04T18:51:47.533 に答える
0

スクリプトを更新するだけ

1.最新の Jquery をダウンロードします (ただし、jquery-1.11.0 を使用しました) 。

2. Microsoft 公式から最新の Microsoft.jQuery.Unobtrusive.Ajax をダウンロードします。

ここから:

https://github.com/aspnet/jquery-ajax-unobtrusive

3.ハード リフレッシュを実行するか、ブラウザのキャッシュをクリアして、ページをもう一度確認します。

希望は誰かを助けます。

于 2016-09-10T12:04:18.997 に答える