2013-06-27 5 views
0

Я использую JavaScript и C# в aspnet. И я хочу передать 3 значения из страницы Asp в код позади, и для этого я использую метод Json. Вот это, как я делаю:Ошибка при использовании Json on Asp

//initialize x, y and nome 
    var requestParameter = { 'xx': x, 'yy': y, 'name': nome }; 

      $.ajax({ 
       type: 'POST', 
       url: 'Canvas.aspx/GetData', 
       data: requestParameter, 
       //contentType: "plain/text", 
       contentType: 'application/json; charset=utf-8', 
       dataType: 'json', 
       success: function (data) { 
        alert(data.x); 

       }, 
       error: function() { alert("error"); } 
      }); 

А затем на C# я сделать:

[WebMethod] 
public static string GetData(Object[] output) 
{ 
    return output.ToString(); 
} 

По какой-то причине я продолжаю получать предупреждение об «ошибке» (тот, который я определен на метод ajax post). Я хотел бы знать, почему, и как я могу избежать этого. Заранее спасибо

+0

Ваш веб-метод, вероятно, не возвращает действительный JSON. Сделайте 'console.log (arguments)' вместо 'alert (" error ")', и вы увидите точное сообщение в консоли. Скорее всего, это будет «Недопустимый символ». – Tommi

+0

Вам нужно проверить код состояния ответа - используйте Fidder, Firebug или Chrome DevToolbar. Если статус 404 - вы не можете получить доступ к методу (возможно, из-за метода, помеченного как статический). В противном случае обновите код до следующего: error: function (jqXHR, textStatus, errorThrown) { alert (textStatus); alert (errorThrown); } – cycaHuH

ответ

0

изменение var requestParameter = { 'xx': x, 'yy': y, 'name': nome }; в

var requestParameter = { "xx": "'+x+'", "yy": "'+y+'", "name": "'+nome+'" }; 

добавить

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

после [WebMethod]

также перед объявлением класса добавить

[System.Web.Script.Services.ScriptService] 

этот тег требуется, чтобы веб-методы, которые будут вызываться из скриптов

Ваш вебсервис должен быть, как этот

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string GetData(String xx, String yy, String name) 
{ 
    return xx+yy+name; 
} 

и JQuery

$.ajax({ 
url: '/Canvas.aspx/GetData',// the path should be correct 
      data: '{ "xx": "'+x+'", "yy": "'+y+'", "name": "'+nome+'" }', 
      dataType: 'json', 
      contentType: 'application/json; charset=utf-8', 
      type: 'POST', 
      success: function (msg) { 
       alert(msg.d); 

      }, 
      error: function (msg) { 

       //alert(msg.d); 
       alert('error'); 
      } 
     }); 
+0

Привет, спасибо за помощь до сих пор. Я попробовал все, что вы сказали, и я все равно получаю ту же ошибку. Что может быть пропало? – Chazz1

+0

см. Ответ. Я обновил его. –

+0

Я не понимаю, все еще ничего ... Я пропустил какую-то библиотеку или что-то еще? – Chazz1

1

The

{ 'xx': x, 'yy': y, 'name': nome } 

не действительны JSON.

Действительный является

var requestParameter = { "xx": 1, "yy": 11, "name": "test" } 

Для запуска просто изменить параметр на webmethod и от object[] к Dictionary<string,object>

Как продолжать ваш последний комментарий я обновить мой пост с еще одним решением.

Aspx страница

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> 

 function testmethod() 
      { 
      var requestParameter = { "xx": 1, "yy": 11, "name": "adadsaasd111" }; 
      PageMethods.test(requestParameter); 
      } 

     function test() 
     { 
      testmethod(); 
     } 
    </script> 

    <input id="Button1" type="button" onclick="return test();" value="button" /> 
</form> 

CS код

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebApplication1 
{ 
public partial class WebForm1 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    [System.Web.Services.WebMethod] 
    public static void test(Dictionary<string,object> cal) 
    { 
     // todo 
    } 
} 

}

+0

Это параметры запроса, метод jquery ajax позволяет передавать объекты. – Tommi

+0

@Tommi Вы говорите, что если вы передадите этот объект по прямому методу, он сыграет ??? –

+0

@Tommi вы пробовали ?? –