2011-01-26 60 views
4

所以我一直在环顾这样的事情的许多不同的例子。大多数人正在使用JSON串行器/解串器或stringify方法。我试图尝试类似的事情,但不幸的是,我总是从Google的Chrome调试器控制台收到错误消息: 未捕获的引用错误:未定义JavaScriptSerializer或类似的东西。我需要将JSON对象传递给WCF调用的javascript/ajax方法。我怎样才能做到这一点?

下面是我尝试使用该信息执行PUT操作的实际方法。

function insertjsonMyUser(person) { 

     document.write("Inside the parameter based insertion method<br/>"); 
     alert("Entered the method, right before the ajax call"); 
     $.ajax({ 
      type: "PUT", 
      url: 'http://localhost/MyService/Service.svc/json/CreateUserInfo', 
      contentType: "application/json", 
      data: {"User" : person.User ,"Pword" : person.Pword,"FName" : person.FName,"LName" : person.LName,"JobTitle" : person.JobTitle,"CompanyName" : person.CompanyName,"CompanyBranch" : person.CompanyBranch,"PhoneNum" : person.PhoneNum,"Email" : person.Email}, 
      beforeSend: function(xhr) { 
       xhr.setRequestHeader('Authorization', 'default default'); 
      } 
     }); 
     alert("The user has been created according to your specifications"); 

} 

我希望人是一个JSON对象使用指定的键我有数据。我已经成功做了类似的方法,但我不希望使用硬编码的JSON对象如:

{"User" : "Zuser" ,"Pword" : "password","FName" : "firstname","LName" : "lastname","JobTitle" : "jobtitle","CompanyName" : "companyname","CompanyBranch" : "companybranch","PhoneNum" : 3123123123,"Email" : "email"} 

我在硬编码的版本中使用的JSON对象为以上目的。有什么我缺少使用方法stringify或序列化?另外,有没有比我在搜索时间里错过的更简单的方法?

最后,我正在运行Windows 7 Enterprise,使用IIS托管以及使用Visual Studio 2010进行编辑。我的服务工作正常。我成功地在小提琴手中测试了它。

+0

不相关,但值得注意的是:`.ajax()`是异步的。您的第二次警报将在服务呼叫完成之前执行*。如果你在电话会议之后开始做一些有意义的事情,那可能会让你失望。要在调用完成后运行代码*,请使用`$ .ajax()```success`事件。 – 2011-01-26 22:04:01

回答

2

所以我终于想出了我自己的问题的答案。实际参数传递不起作用的原因是单引号。当我宣布我的实际JSON对象,我宣布它为:

{"User" : "Zuser" ,"Pword" : "password","FName" : "firstname","LName" : "lastname","JobTitle" : "jobtitle","CompanyName" : "companyname","CompanyBranch" : "companybranch","PhoneNum" : 3123123123,"Email" : "email"} 

我确实需要将其声明为:

'{"User" : "Zuser" ,"Pword" : "password","FName" : "firstname","LName" : "lastname","JobTitle" : "jobtitle","CompanyName" : "companyname","CompanyBranch" : "companybranch","PhoneNum" : 3123123123,"Email" : "email"}' 

我想这是可能的单引号追加到实际的对象该方法本身,但你可以像我一样解决这个问题来做实际的声明。

1

以及

contentType: "application/json", 
data: person, 
beforeSend: .... 

将这项工作?

http://api.jquery.com/jQuery.ajax/,数据可以是一个对象或字符串。

+0

不幸的是,这会导致与字符串化和序列化不同的错误。我得到的错误是: 无法加载资源:服务器响应状态为400(错误请求) – 2011-01-26 19:55:42

0

看起来你的WCF服务可能没有找到JavascriptSerializer的错误。你在一台机器上编译并将其部署到另一台机器上?它们可能不会与.NET库明智地同步。

此外,请添加确切的错误消息,你会得到,这将是非常有益的。

+0

我在与IIS托管计算机相同的机器上构建了该服务。我正在尝试使用上面的JavaScript访问服务的外部HTML页面。它们都位于C:\ inetpub \ wwwroot中,但它们都在wwwroot文件夹中有一个单独的文件夹。 至于确切的错误消息,我直接从Chrome的控制台收到了一个示例错误消息。也许有其他地方有更好的错误信息? 此外,我不是只使用串行器或解串器。任何方式,将允许访问将不胜感激。 – 2011-01-26 19:59:22

相关问题