Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jasmine和Jquery,加载JSON文件_Javascript_Jquery_Ajax_Coffeescript_Jasmine - Fatal编程技术网

Javascript Jasmine和Jquery,加载JSON文件

Javascript Jasmine和Jquery,加载JSON文件,javascript,jquery,ajax,coffeescript,jasmine,Javascript,Jquery,Ajax,Coffeescript,Jasmine,我使用coffeescript/jquery使用以下方法加载JSON文件: Class JsonParser this.return = (json_file_path, string_to_query) -> $.getJSON json_file_path, (data) -> $.each data, (key,val) -> if key == string_to_query return val 我正在茉莉花中测试它: exp

我使用coffeescript/jquery使用以下方法加载JSON文件:

Class JsonParser

this.return  = (json_file_path, string_to_query) ->
  $.getJSON json_file_path, (data) ->
    $.each data, (key,val) ->
     if key == string_to_query
       return val
我正在茉莉花中测试它:

expect(JsonParser.return("file.json", "key").toEqual("value")
但茉莉花吐出来的却是:

Expected { readyState : 1, getResponseHeader : Function, getAllResponseHeaders
 : Function, setRequestHeader : Function, overrideMimeType : Function, statusCode : Function, abort : 
Function, state : Function, always : Function, then : Function, promise : Function, pipe : Function, d
one : Function, fail : Function, progress : Function, complete : Function, success : Function, error :
 Function } to equal 'value'.
假设JSON文件只有一行:
{“key”:“value”}


我刚刚被jquery/coffeescript/ajax等弄湿了脚,不明白Jasmines的反应。如果需要更多信息,请告诉我,谢谢

您的问题是您的
return
方法没有返回您认为它能返回的内容。您的
return
函数返回返回的内容,
getJSON
是一个AJAX调用。jQuery的AJAX调用all return,这与AJAX回调返回的内容无关。事件的顺序如下所示:

JsonParser.return("file.json", "key", (value) ->
  # Do whatever needs to be done with value in here.
)
  • 调用
    JsonParser.return
  • return
    调用
    $.getJSON
  • getJSON
    对服务器进行异步调用,然后返回
    jqXHR
  • return
    返回与
    getJSON
    返回的
    jqXHR
    相同的
  • 一段时间过去了
  • 服务器开始响应,并调用回调来搜索JSON
  • 问题是当(5)发生时,调用
    JsonParser.return的代码仍在运行,但它没有JSON

    绕过AJAX调用的异步性质的通常方法是发送一个回调函数,该函数将在准备就绪时被调用:

    @return: (json_file_path, string_to_query, callback) ->
      $.getJSON json_file_path, (data) ->
        $.each data, (key,val) ->
         if key == string_to_query
           callback(val)
    
    然后你会这样使用它:

    JsonParser.return("file.json", "key", (value) ->
      # Do whatever needs to be done with value in here.
    )
    
    现在你有了一些应该有效的东西,你可以在这里找到如何使用茉莉花:


    感谢您的回复,我仍然得到了相同的结果,我使用的json文件路径是一个本地文件,而不是通过服务器调用的,这可能是一个问题吗?@discrick:没有服务器就无法实现AJAX,也无法使用普通的Jasmine技术来测试AJAX。