2013-11-15 44 views
0

我有一個在本地正常工作的ajax調用,但是當我將它發佈到服務器時,代碼永遠不會執行,但返回「200 OK」。沒有「成功」代碼被引發,也沒有「錯誤」代碼。這是我的阿賈克斯電話:

$.ajax({ 
       type: "POST", 
       url: "/CargadorContadores.aspx/ObtenerContadores", 
       contentType: "application/json; charset=utf-8", 
       data: "", 
       async: false, 
       dataType: "json", 
       success: function(data) { 
        var myObj = JSON.parse(data.d); 

        for (var i = 0; i < myObj.length; i++) { 
         var element = document.getElementById("LbItem " + myObj[i].MenuItemID); 
         element.innerHTML = "<b>" + element.innerHTML + " (" + myObj[i].Cantidad + ")</b>"; 
        } 
       }, 
       error: function(xhr, status, error) { 
        var err = eval("(" + xhr.responseText + ")"); 
        alert(err.Message); 
       } 
      }); 
     }); 

我也試圖把完整的網址在「url」字段,但仍然沒有運氣。 奇怪的是,當我把完整的URL直接放入瀏覽器時,它仍然沒有執行代碼。它在當地很好地工作!

我知道有一個類似的帖子(jQuery $.ajax failing silently, no error messages, and server responded with 200 OK),但沒有解決,它在這裏瘋狂。

PD:這不是跨域,我的Ajax代碼是在的.ascx,我試圖調用一個方法在一個.aspx

非常感謝!!!!

編輯:我試圖刪除我的web項目的System.web.extensions引用,並將dll添加到我的bin,但它仍然不起作用(1.0.61025.0版本)。此外,我在IIS中運行的ASP.NET網站與框架2.0,我沒有框架3.5安裝在我的服務器上(但我本地)。也許這就是問題所在?由於客戶端安全策略,我無法安裝它,我該怎麼辦?

編輯2:我試着從我的.aspx做一個簡單的迴應,只是爲了測試問題是否在該方法中,但它仍然沒有執行成功函數。這裏是我的.aspx代碼:

[WebMethod] 
     public static string ObtenerContadores() 
     { 

      return new JavaScriptSerializer().Serialize("true"); 
     } 

和改編的.ascx

$.ajax({ 
        type: "POST", 
        url: "/CargadorContadores.aspx/ObtenerContadores", 
        contentType: "application/json; charset=utf-8", 
        data: "", 
        async: false, 
        dataType: "json", 
        success: function(dictionary) { 
         alert("hello"); 
        }, 
        error: function(xhr, status, error) { 
         var err = eval("(" + xhr.responseText + ")"); 
         alert(err.Message); 
        } 
       }); 
      }); 
+0

問題是在服務器端檢查響應 – Abdessamad

回答

0

我要感謝大家的幫助。 我終於不得不在服務器上安裝3.5框架,我沒有選擇。 第二次我安裝它,並更新了web.config dll的引用到3.5,它的工作就像一個魅力。

再次感謝!!!!!

0

這是你的問題:「奇怪的是,當我把完整的URL直接在瀏覽器中,它仍然是不執行代碼「。您的JavaScript期望 - 需要 - 一個JSON響應,顯然沒有得到任何迴應。這不是JavaScript問題,但是.aspx頁面存在問題。

編輯:根據您的意見,很明顯,問題是,你的.aspx頁面沒有返回你所期望的。因爲即使直接訪問它,.aspx也不會產生預期的輸出,問題出在該頁面上,而不是在jQuery中。

假設.aspx生成{},falsetrue。您的success代碼將運行,但不會執行任何操作。試着把alert("Foo");放在裏面,看看會發生什麼。問題不在於你的jQuery被破壞;這是它沒有從你的.aspx頁面獲得有意義的輸入。

P.S.我建議在你的成功函數中使用除data以外的變量名稱,以防在你的.ajax調用中被data對象屬性搞亂。

+0

我知道,這是我的問題,我的JavaScript沒有收到來自.aspx的響應,但在本地它的作品完美。我的代碼沒有錯誤。我猜這是一個配置錯誤,也許是.dlls或類似的東西。 – Nicole

+0

我的意思是這個。你說,即使你直接進入有問題的URL,它也不會執行代碼。我將其解釋爲意味着你要去任何地方。無論如何/ CargadorContadores.aspx/ObtenerContadores和ASPX都沒有執行。如果這就是你說的問題不是jQuery或JSON問題;這是您的.aspx頁面的問題。如果這不是你的意思,請讓我知道。 –

+0

是的,但是當我在本地執行它時,它工作正常。請檢查我對編號 – Nicole

0

好的,我相信我已經明白了這一點,所以我發佈第二個答案來保留前面的討論。

這是修復程序。刪除這一行:

contentType: "application/json; charset=utf-8", 

在我的測試腳本,這引起了jQuery的發送Content-Typeapplication/json; charset=utf-8,符合市場預期,但該請求的實際內容不正確發送的JSON。例如,不是發送{"foo":"bar"},而是發送foo=bar。因此,接收腳本的行爲就好像根本沒有發佈數據。當我將上面的行註釋掉時,我的測試腳本運行良好,並根據目標URL收到的值執行了我所期望的操作。

請注意,這會將您的數據作爲普通發佈數據發佈。例如,如果你的$.ajax()調用看起來是這樣的,張貼的數據將包含一個名爲foo和一個變量命名who

$.ajax({ 
    ... 
    data: {foo : "bar", 
     who : "what"}, 
    ... 
}); 

如果你要張貼已序列化JSON,像這樣做

$.ajax({ 
    ... 
    data: { somevariablename: '{"foo":"bar","who":"what"}' }, 
    ... 
}); 

然後,您只需解析服務器端的POST參數somevariablename

希望這會有所幫助!

0

如果VS2012,嘗試添加MIME類型處理器,因爲VS2012具有IIS Express和它需要添加MIME類型的處理程序外, 添加以下代碼到web.config中

<system.webServer> 
<staticContent> 
    <mimeMap fileExtension=".json" mimeType="application/json" /> 
</staticContent> 
</system.webServer> 

..而如果不VS2012那麼請點擊此鏈接

add .json handler support in IIS 7

相關問題