getJSON调用的“missing; before statement”错误

时间:2011-03-24 10:59:38

标签: javascript jquery ajax vb.net json

有人可以解释以下内容。我已经在网上搜寻了多年,试图找到帮助,我相信我做的一切都是正确的,但仍然会出错。

我的页面上有以下脚本:

        function GetPageAdvert2(url) {

            $.getJSON('http://url/servicename.asmx/CheckAdvert?callback=?', 
            {
                pagename:   url,
                success:    function(data) { alert(data) }
            });        
        };

我的网络服务只返回:

jsonp1301065851157('url/KiN_150x300.jpg');

问题在于,当我调用GetPageAdvert2时,什么也没发生。

我的WebService(用VB.Net编写)是:

        <WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, XmlSerializeString:=False, UseHttpGet:=True)> _
Public Sub CheckAdvert(ByVal pagename As String, ByVal callback As String)

    Dim pageUID As Integer = 0
    Dim advertURL As List(Of aU) = New List(Of aU)()

    Dim sss As String

    Using con As New System.Data.SqlClient.SqlConnection(My.Settings.sqlConnection2)

           SQL STUFF IN HERE
           the SELECT statement will return a value and place it in Variable SSS


    End Using

    Context.Response.ContentType = "application/json"
    Context.Response.Write(callback & "('" & sss & "');")
    Context.Response.End()


End Function

我回来的回复(在FF中)是:

PARAMS:
callback    jsonp1300979718942
contentType application/json; charset=utf-8
pagename    default.html
success undefined

RESPONSE:
jsonp1301065851157('url/KiN_150x300.jpg');

我认为这主要是正确的。

然而,“警报(数据)”除了“未定义”之外不会产生任何其他内容。

2 个答案:

答案 0 :(得分:3)

使用JSONP时,您不能简单地返回JSON字符串,因为返回的字符串实际上会在新的script元素中注入当前页面。您需要返回一个调用回调处理程序的有效JavaScript语句,其中将解析响应。

维基百科页面上有一个例子:

parseResponse({"Name": "Cheeso", Id : 1823, "Rank": 7})

请注意,上面的语法无效JSON,在这种情况下不需要,因为您只以文字符号传递JavaScript对象。

此外,正如x10在他的评论中所说,jQuery将?查询参数中的callback更改为您应该调用的唯一函数,因此不要只复制粘贴上面的示例,但用上述参数替换parseResponse

更新:您应该更改的最后一项是jQuery.getJSON的参数:语法如下:

jQuery.getJSON( url, [ data ], [ success(data, textStatus, jqXHR) ] )

因此,您应该将成功函数作为第二个或第三个参数传递,而不是作为对象的一部分(将其与一般jQuery.ajax()函数调用进行比较):

$.getJSON("***URL***.asmx/CheckAdvert?callback=?", function(data) { callback(data) });

答案 1 :(得分:3)

我认为你的功能应该如下:

function GetPageAdvert2(url) {
            $.getJSON("***URL HERE***.asmx/CheckAdvert?callback=?", 
            {
               pagename:  url,
               success: function(data){
                    alert(data);
               }
            });        
        }

请注意,success是getJSON的一个属性。你在外面有它

相关问题