2011-06-06 22 views
0

這是我第一次玩Ajax。我正試圖創建一個基本的登錄。反正我有以下腳本..ajax在var data = json_parse(msg.d)後不能運行;

 <script language = "javascript"> 
      function Login() { 

         $.ajax({ 
         type: "POST", 
         url: "ajax.aspx/Login", 
         data: '{' + 
           'username:"' + $('#username').val() + '",' + 
           'password:"' + $('#password').val() + '"' + 
           '}', 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         success: function(msg) { 
          alert("alert1"); 
          var data = json_parse(msg.d); 
          alert("alert2"); 
          if (!data.error) { 
           alert("No Error); 
          } 
          else { 
           alert(data.error); 
          } 
         }, 
         error: function(msg) { 
          alert('Failure: ' + msg); 
         } 
        });   

      } 
    </script> 

出於某種原因,它不運行後VAR數據= json_parse(msg.d)任何東西;

它顯示前兩個警報,但註釋後。

Ajax頁面有如下`

[WebMethod] 
public static string Login(string username, string password) 
{ 
    return "{\"error\": \"No IDs\"}"; 
} 
+0

你是否已經通過調試器實現了這一點?也許'數據'沒有被正確解析?因此,不能訪問「錯誤」,因此失敗的連鎖反應。只是一個想法。 – 2011-06-06 12:51:41

+0

嗯,即時通訊不在本地測試它在Web服務器上,所以沒有調試器 – Beginner 2011-06-06 12:58:45

+0

Javascript在本地執行,並且IE有一個調試器(這是它唯一的保存優雅,IMO。) – 2011-06-06 13:04:28

回答

0

請告訴我函數json_parse裏面?該功能可能是您錯誤的根源。 解析JSON的更好方法就是這樣。

  1. Go to Douglas Crockford's Github JSON-js/json2.jsjscompress.com複製
  2. 縮減大小並拷貝壓縮碼(可跳過此步驟)
  3. 在你的應用程序文件夾的地方粘貼它作爲json2.js
  4. 現在引用腳本在你正在提取數據的頁面上
    <script src="path/to/script/json2.js" type="text/javascript"></script>

  5. 現在在函數裏面,解析你的JSON,像th是。
    var data = JSON.parse(msg.d);

上不相關的側面說明,它如果你改變error這樣有效地捕捉錯誤更好。

error: function (xhr, status, error) { 
    alert(xhr.statusText); 
} 

另外,請致電WebMethod這樣。

[WebMethod] 
public static string Login(string username, string password) 
{ 
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    dynamic obj = new ExpandoObject(); 
    obj.error = "No IDs"; 
    string str = js.Serialize(obj); 
    return str; 
} 
+0

'_應該是容易出錯' - _應該是?這是荒謬的。 – 2011-06-06 13:32:47

+0

我明白,情緒 – naveen 2011-06-06 18:24:04

2

首先,JavaScript沒有內置json_parse()函數。除非你自己定義了,否則可能會引發JavaScript錯誤。在較新的瀏覽器中可用的標準客戶端實用程序是JSON.parse()

更重要的是,你有一些冗餘序列化在那裏進行。當您使用ASP.NET ScriptServices和PageMethods時,對let ASP.NET's built-in serializer do the work of converting your response to JSON非常重要。

現在,您的WebMethod正在恢復雙向序列化JSON的混亂,看起來是這樣的:

{d:{\"{\"error\": \"No IDs\"}\"} 

既然你已經設置你的dataTypejson,jQuery是之前已經運行的JSON解析操作的成功或錯誤處理程序運行,但它只是將第一級JSON轉換爲JavaScript對象。不幸的是,這隻能讓.d包含另一個JSON字符串。

如果你讓ASP。NET做的工作適合你,你可以在將WebMethod,而不是使用這樣的:

[WebMethod] 
public static string Login(string username, string password) 
{ 
    return "No IDs"; 
} 

然後,事情會更順利的客戶端:

success: function(msg) { 
    if (!msg.d) { 
    alert("No Error); 
    } else { 
    alert(msg.d); 
    } 
}, 

如果你真的想保留error作爲錯誤信息的關鍵,你可以做這樣的事情:

[WebMethod] 
public static object Login(string username, string password) 
{ 
    return new { error = "No IDs" }; 
} 

或者,甚至用一個定義的類:

public class ErrorResponse 
{ 
    public string error { get; set; } 
} 

[WebMethod] 
public static ErrorResposne Login(string username, string password) 
{ 
    var response = new ErrorResponse(); 

    response.error = "No IDs"; 

    return response; 
} 

在上述任何一種情況下,只要遇到客戶端,就可以通過msg.d.error訪問錯誤文本。

+0

+1呃不知道你在身邊:) – naveen 2011-06-06 13:31:46